diff --git a/.gitmodules b/.gitmodules index e69de29..1a23456 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Aspid.FastTools/Assets/Plugins/Aspid/Internal/Unity"] + path = Aspid.FastTools/Assets/Plugins/Aspid/Internal/Unity + url = git@github.com:VPDPersonal/Aspid.Internal.Unity.git diff --git a/Aspid.UnityFastTools.Generators/.gitignore b/Aspid.FastTools.Generators/.gitignore similarity index 100% rename from Aspid.UnityFastTools.Generators/.gitignore rename to Aspid.FastTools.Generators/.gitignore diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators.Sample/Aspid.UnityFastTools.Generators.Sample.csproj b/Aspid.FastTools.Generators/Aspid.FastTools.Generators.Sample/Aspid.FastTools.Generators.Sample.csproj similarity index 61% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators.Sample/Aspid.UnityFastTools.Generators.Sample.csproj rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators.Sample/Aspid.FastTools.Generators.Sample.csproj index c7d1c6e..c971c51 100644 --- a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators.Sample/Aspid.UnityFastTools.Generators.Sample.csproj +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators.Sample/Aspid.FastTools.Generators.Sample.csproj @@ -3,13 +3,13 @@ net6.0 enable - UnityFastToolsGenerators.Sample + Aspid.FastTools.Sample 6000.2.7f2 9 - + diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators.Tests/Aspid.UnityFastTools.Generators.Tests.csproj b/Aspid.FastTools.Generators/Aspid.FastTools.Generators.Tests/Aspid.FastTools.Generators.Tests.csproj similarity index 81% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators.Tests/Aspid.UnityFastTools.Generators.Tests.csproj rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators.Tests/Aspid.FastTools.Generators.Tests.csproj index 963f078..e4d8ac9 100644 --- a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators.Tests/Aspid.UnityFastTools.Generators.Tests.csproj +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators.Tests/Aspid.FastTools.Generators.Tests.csproj @@ -6,7 +6,7 @@ false - UnityFastToolsGenerators.Tests + Aspid.FastTools.Tests @@ -20,7 +20,7 @@ - + diff --git a/Aspid.UnityFastTools.Generators/Aspid.UnityFastTools.Generators.sln b/Aspid.FastTools.Generators/Aspid.FastTools.Generators.sln similarity index 64% rename from Aspid.UnityFastTools.Generators/Aspid.UnityFastTools.Generators.sln rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators.sln index aa25b9e..29d5927 100644 --- a/Aspid.UnityFastTools.Generators/Aspid.UnityFastTools.Generators.sln +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators.sln @@ -1,10 +1,10 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspid.UnityFastTools.Generators", "UnityFastToolsGenerators\Aspid.UnityFastTools.Generators\Aspid.UnityFastTools.Generators.csproj", "{CB9D8D51-7D86-4B84-A0DB-73E418962DA7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspid.FastTools.Generators", "Aspid.FastTools.Generators\Aspid.FastTools.Generators.csproj", "{CB9D8D51-7D86-4B84-A0DB-73E418962DA7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspid.UnityFastTools.Generators.Sample", "UnityFastToolsGenerators\Aspid.UnityFastTools.Generators.Sample\Aspid.UnityFastTools.Generators.Sample.csproj", "{2835DD81-D105-4C2E-AE03-BC7D064C29D1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspid.FastTools.Generators.Sample", "Aspid.FastTools.Generators.Sample\Aspid.FastTools.Generators.Sample.csproj", "{2835DD81-D105-4C2E-AE03-BC7D064C29D1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspid.UnityFastTools.Generators.Tests", "UnityFastToolsGenerators\Aspid.UnityFastTools.Generators.Tests\Aspid.UnityFastTools.Generators.Tests.csproj", "{F4953608-2F14-4B2E-B91C-B3FDFC81B180}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspid.FastTools.Generators.Tests", "Aspid.FastTools.Generators.Tests\Aspid.FastTools.Generators.Tests.csproj", "{F4953608-2F14-4B2E-B91C-B3FDFC81B180}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Aspid.UnityFastTools.Generators.csproj b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Aspid.FastTools.Generators.csproj similarity index 91% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Aspid.UnityFastTools.Generators.csproj rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators/Aspid.FastTools.Generators.csproj index 74888a7..1a0f6a9 100644 --- a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Aspid.UnityFastTools.Generators.csproj +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Aspid.FastTools.Generators.csproj @@ -3,9 +3,9 @@ netstandard2.0 enable - 13 + 14 true - UnityFastToolsGenerators + Aspid.FastTools diff --git a/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Descriptions/General.cs b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Descriptions/General.cs new file mode 100644 index 0000000..201eb71 --- /dev/null +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Descriptions/General.cs @@ -0,0 +1,8 @@ +using Aspid.Generators.Helper; + +namespace Aspid.FastTools.Descriptions; + +public static class General +{ + public static readonly string ProfilerMarkerGeneratedCode = $"""{Classes.GeneratedCodeAttribute}("Aspid.FastTools.Generators.ProfilerMarkersGenerator", "1.0.0")"""; +} \ No newline at end of file diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Bodies/ExtensionClassBody.cs b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Bodies/ExtensionClassBody.cs similarity index 94% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Bodies/ExtensionClassBody.cs rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Bodies/ExtensionClassBody.cs index 1939a0e..6bba608 100644 --- a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Bodies/ExtensionClassBody.cs +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Bodies/ExtensionClassBody.cs @@ -2,12 +2,12 @@ using Microsoft.CodeAnalysis; using Aspid.Generators.Helper; using System.Collections.Immutable; -using UnityFastToolsGenerators.Generators.ProfilerMarkers.Data; +using Aspid.FastTools.Generators.ProfilerMarkers.Data; using static Aspid.Generators.Helper.Classes; +using static Aspid.FastTools.Descriptions.General; using static Aspid.Generators.Helper.Unity.UnityClasses; -using static UnityFastToolsGenerators.Descriptions.General; -namespace UnityFastToolsGenerators.Generators.ProfilerMarkers.Bodies; +namespace Aspid.FastTools.Generators.ProfilerMarkers.Bodies; public static class ExtensionClassBody { diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCall.cs b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCall.cs similarity index 88% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCall.cs rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCall.cs index dd3ea86..9801370 100644 --- a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCall.cs +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCall.cs @@ -1,6 +1,6 @@ using Microsoft.CodeAnalysis; -namespace UnityFastToolsGenerators.Generators.ProfilerMarkers.Data; +namespace Aspid.FastTools.Generators.ProfilerMarkers.Data; public readonly struct MarkerCall( INamedTypeSymbol namedTypeSymbol, diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallMember.cs b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallMember.cs similarity index 82% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallMember.cs rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallMember.cs index f0a01d7..8f3b9b5 100644 --- a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallMember.cs +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallMember.cs @@ -1,7 +1,7 @@ using Microsoft.CodeAnalysis; using System.Collections.Immutable; -namespace UnityFastToolsGenerators.Generators.ProfilerMarkers.Data; +namespace Aspid.FastTools.Generators.ProfilerMarkers.Data; public readonly struct MarkerCallMember( IMethodSymbol methodSymbol, diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallType.cs b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallType.cs similarity index 81% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallType.cs rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallType.cs index af2d3c7..c75c621 100644 --- a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallType.cs +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/Data/MarkerCallType.cs @@ -1,7 +1,7 @@ using Microsoft.CodeAnalysis; using System.Collections.Immutable; -namespace UnityFastToolsGenerators.Generators.ProfilerMarkers.Data; +namespace Aspid.FastTools.Generators.ProfilerMarkers.Data; public readonly struct MarkerCallType( ISymbol symbol, diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/ProfilerMarkersGenerator.cs b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/ProfilerMarkersGenerator.cs similarity index 94% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/ProfilerMarkersGenerator.cs rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/ProfilerMarkersGenerator.cs index 846c545..00e2233 100644 --- a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Generators/ProfilerMarkers/ProfilerMarkersGenerator.cs +++ b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Generators/ProfilerMarkers/ProfilerMarkersGenerator.cs @@ -2,10 +2,10 @@ using Microsoft.CodeAnalysis; using System.Collections.Immutable; using Microsoft.CodeAnalysis.CSharp.Syntax; -using UnityFastToolsGenerators.Generators.ProfilerMarkers.Data; -using UnityFastToolsGenerators.Generators.ProfilerMarkers.Bodies; +using Aspid.FastTools.Generators.ProfilerMarkers.Data; +using Aspid.FastTools.Generators.ProfilerMarkers.Bodies; -namespace UnityFastToolsGenerators.Generators.ProfilerMarkers; +namespace Aspid.FastTools.Generators.ProfilerMarkers; [Generator(LanguageNames.CSharp)] public class ProfilerMarkersGenerator : IIncrementalGenerator diff --git a/Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Properties/launchSettings.json b/Aspid.FastTools.Generators/Aspid.FastTools.Generators/Properties/launchSettings.json similarity index 100% rename from Aspid.UnityFastTools.Generators/UnityFastToolsGenerators/Aspid.UnityFastTools.Generators/Properties/launchSettings.json rename to Aspid.FastTools.Generators/Aspid.FastTools.Generators/Properties/launchSettings.json diff --git a/Aspid.FastTools.Generators/Directory.Build.targets b/Aspid.FastTools.Generators/Directory.Build.targets new file mode 100644 index 0000000..f176b58 --- /dev/null +++ b/Aspid.FastTools.Generators/Directory.Build.targets @@ -0,0 +1,11 @@ + + + + + <_UnityDestination>$(MSBuildThisFileDirectory)../Aspid.FastTools/Assets/Plugins/Aspid/FastTools/ + + + + + + diff --git a/Aspid.UnityFastTools/.gitignore b/Aspid.FastTools/.gitignore similarity index 100% rename from Aspid.UnityFastTools/.gitignore rename to Aspid.FastTools/.gitignore diff --git a/Aspid.UnityFastTools/Assets/Plugins.meta b/Aspid.FastTools/Assets/Plugins.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins.meta rename to Aspid.FastTools/Assets/Plugins.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid.meta b/Aspid.FastTools/Assets/Plugins/Aspid.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid.meta rename to Aspid.FastTools/Assets/Plugins/Aspid.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Aspid.UnityFastTools.Generators.dll b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Aspid.FastTools.Generators.dll similarity index 99% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Aspid.UnityFastTools.Generators.dll rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Aspid.FastTools.Generators.dll index 95a75d7..f808b17 100644 Binary files a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Aspid.UnityFastTools.Generators.dll and b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Aspid.FastTools.Generators.dll differ diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Aspid.UnityFastTools.Generators.dll.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Aspid.FastTools.Generators.dll.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Aspid.UnityFastTools.Generators.dll.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Aspid.FastTools.Generators.dll.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images/Aspid.UnityFastTools.ProfilerMarkers.png b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.ProfilerMarkers.png similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images/Aspid.UnityFastTools.ProfilerMarkers.png rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.ProfilerMarkers.png diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images/Aspid.UnityFastTools.ProfilerMarkers.png.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.ProfilerMarkers.png.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images/Aspid.UnityFastTools.ProfilerMarkers.png.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.ProfilerMarkers.png.meta diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.SerializableType.png b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.SerializableType.png new file mode 100644 index 0000000..a332f4e Binary files /dev/null and b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.SerializableType.png differ diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Resources/Editor/Aspid.UnityFastTools Icon.png.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.SerializableType.png.meta similarity index 95% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Resources/Editor/Aspid.UnityFastTools Icon.png.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.SerializableType.png.meta index 91a7f78..683f8d2 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Resources/Editor/Aspid.UnityFastTools Icon.png.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.SerializableType.png.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 -guid: daa63609570f146cfa1b178f6d6c8bda +guid: b0d82cbe15d4842dd9d7c31cb4040e88 TextureImporter: internalIDToNameTable: [] externalObjects: {} serializedVersion: 13 mipmaps: mipMapMode: 0 - enableMipMap: 0 + enableMipMap: 1 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 @@ -37,10 +37,10 @@ TextureImporter: filterMode: 1 aniso: 1 mipBias: 0 - wrapU: 1 - wrapV: 1 + wrapU: 0 + wrapV: 0 wrapW: 0 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 spriteMode: 0 @@ -52,9 +52,9 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 1 + alphaIsTransparency: 0 spriteTessellationDetail: -1 - textureType: 2 + textureType: 0 textureShape: 1 singleChannelComponent: 0 flipbookRows: 1 diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.TypeSelectorWindow.png b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.TypeSelectorWindow.png new file mode 100644 index 0000000..5c97940 Binary files /dev/null and b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.TypeSelectorWindow.png differ diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.TypeSelectorWindow.png.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.TypeSelectorWindow.png.meta new file mode 100644 index 0000000..7553ff5 --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.TypeSelectorWindow.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 648f40dc17f7a46a99e35e8dcf5318e7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + 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 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images/Aspid.UnityFastTools.VisualElement.png b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.VisualElement.png similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images/Aspid.UnityFastTools.VisualElement.png rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.VisualElement.png diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images/Aspid.UnityFastTools.VisualElement.png.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.VisualElement.png.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/Images/Aspid.UnityFastTools.VisualElement.png.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/Images/Aspid.FastTools.VisualElement.png.meta diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README.md b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README.md new file mode 100644 index 0000000..92fdb3a --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README.md @@ -0,0 +1,637 @@ +# Aspid.FastTools + +**Aspid.FastTools** is a set of tools designed to minimize routine code writing in Unity. + +## Source Code + +[[Aspid.FastTools](https://github.com/VPDPersonal/Aspid.FastTools)] + +--- + +## Integration + +Install Aspid.FastTools using one of the following methods: + +- **Download .unitypackage** — Visit the [Release page on GitHub](https://github.com/VPDPersonal/Aspid.FastTools/releases) and download the latest version, `Aspid.FastTools.X.X.X.unitypackage`. Import it into your project. +- **Via UPM** (Unity Package Manager) integrate the following packages: + - `https://github.com/VPDPersonal/Aspid.Internal.Unity.git` + - `https://github.com/VPDPersonal/Aspid.FastTools.git?path=Aspid.FastTools/Assets/Plugins/Aspid/FastTools` + +--- + +## Namespaces + +| Namespace | Description | +|-----------|-------------| +| `Aspid.FastTools` | Runtime API — types, VisualElement extensions | +| `Aspid.FastTools.Editors` | Editor-only API — property drawers, IMGUI scopes, editor extensions | + +--- + +## ProfilerMarker + +Provides source-generated `ProfilerMarker` registration. The generator creates a static marker per call-site, identified by the calling method and line number. + +```csharp +using UnityEngine; +using Aspid.FastTools; + +public class MyBehaviour : MonoBehaviour +{ + private void Update() + { + DoSomething1(); + DoSomething2(); + } + + private void DoSomething1() + { + using var _ = this.Marker(); + // Some code + } + + private void DoSomething2() + { + using (this.Marker()) + { + // Some code + using var _ = this.Marker().WithName("Calculate"); + // Some code + } + } +} +``` + +### Generated code + +```csharp +using System; +using Unity.Profiling; +using System.Runtime.CompilerServices; + +internal static class __MyBehaviourProfilerMarkerExtensions +{ + private static readonly ProfilerMarker DoSomething1_line_13 = new("MyBehaviour.DoSomething1 (13)"); + private static readonly ProfilerMarker DoSomething2_line_19 = new("MyBehaviour.DoSomething2 (19)"); + private static readonly ProfilerMarker DoSomething2_line_22 = new("MyBehaviour.Calculate (22)"); + + public static ProfilerMarker.AutoScope Marker(this MyBehaviour _, [CallerLineNumberAttribute] int line = -1) + { + if (line is 13) return DoSomething1_line_13.Auto(); + if (line is 19) return DoSomething2_line_19.Auto(); + if (line is 22) return DoSomething2_line_22.Auto(); + + throw new Exception(); + } +} +``` + +### Result + +![Aspid.FastTools.ProfilerMarkers.png](Images/Aspid.FastTools.ProfilerMarkers.png) + +--- + +## Serializable Type System + +Allows serializing a `System.Type` reference in the Unity Inspector. The selected type is stored as an assembly-qualified name and resolved lazily on first access. + +### SerializableType + +Two variants are available: + +- **`SerializableType`** — stores any type (base type is `object`) +- **`SerializableType`** — stores a type constrained to `T` or its subclasses + +Both support implicit conversion to `System.Type`. + +```csharp +using UnityEngine; +using Aspid.FastTools; + +public class MyBehaviour : MonoBehaviour +{ + [SerializeField] private SerializableType _anyType; + [SerializeField] private SerializableType _behaviourType; + + private void Start() + { + Type type1 = _anyType; // implicit operator + Type type2 = _behaviourType.Type; // explicit property + + var instance = (MonoBehaviour)gameObject.AddComponent(type2); + } +} +``` +![Aspid.FastTools.SerializableType.png](Images/Aspid.FastTools.SerializableType.png) +### TypeSelectorAttribute + +An editor-only `PropertyAttribute` that restricts the type selection popup to specific base types. Applied to `string` fields that store assembly-qualified type names. + +```csharp +[Conditional("UNITY_EDITOR")] +public sealed class TypeSelectorAttribute : PropertyAttribute +{ + public TypeSelectorAttribute() // base type: object + public TypeSelectorAttribute(Type type) + public TypeSelectorAttribute(params Type[] types) + public TypeSelectorAttribute(string assemblyQualifiedName) + public TypeSelectorAttribute(params string[] assemblyQualifiedNames) +} +``` + +```csharp +using UnityEngine; +using Aspid.FastTools; + +public class MyBehaviour : MonoBehaviour +{ + [TypeSelector(typeof(IMyInterface))] + [SerializeField] private string _typeName; +} +``` + +### Type Selector Window + +The Inspector shows a button that opens a searchable popup window with: + +- Hierarchical namespace organization +- Text search with filtering +- Keyboard navigation (Arrow keys, Enter, Escape) +- Navigation history (back button) +- Assembly disambiguation for types with identical names + +![Aspid.FastTools.TypeSelectorWindow.png](Images/Aspid.FastTools.TypeSelectorWindow.png) +--- + +## Enum System + +Provides serializable enum-to-value mappings configurable from the Inspector. + +### EnumValues\ + +A serializable collection of `EnumValue` entries with a configurable default value. Implements `IEnumerable>`. + +```csharp +[Serializable] +public sealed class EnumValues : IEnumerable> +``` + +| Member | Description | +|--------|-------------| +| `TValue GetValue(Enum enumValue)` | Returns the mapped value, or `_defaultValue` if not found | +| `bool Equals(Enum, Enum)` | Equality check with proper `[Flags]` support | + +Supports `[Flags]` enums: `Equals` uses `HasFlag` and treats `0`-valued members correctly. + +```csharp +using UnityEngine; +using Aspid.FastTools; + +public enum Direction { Left, Right, Up, Down } + +public class MyBehaviour : MonoBehaviour +{ + [SerializeField] private EnumValues _directionSprites; + + private void SetIcon(Direction dir) + { + var sprite = _directionSprites.GetValue(dir); + _image.sprite = sprite; + } +} +``` + +In the Inspector, select the enum type in the `EnumValues` header, then assign a value for each enum member. + +--- + +## SerializedProperty Extensions + +Chainable extension methods on `SerializedProperty` for setting values and applying changes. + +```csharp +using Aspid.FastTools.Editors; +``` + +### Update and Apply + +```csharp +property.Update(); +property.UpdateIfRequiredOrScript(); +property.ApplyModifiedProperties(); +``` + +All methods return `SerializedProperty`, enabling chaining. + +### SetValue / SetXxx + +For each supported type there are two methods: + +- `SetXxx(value)` — sets the value, returns `property` for chaining +- `SetXxxAndApply(value)` — sets the value and immediately calls `ApplyModifiedProperties()` + +`SetValue(value)` dispatches to the appropriate typed setter automatically. + +| Method family | Unity type | +|---------------|-----------| +| `SetInt` / `SetUint` / `SetLong` / `SetUlong` | Integer types | +| `SetFloat` / `SetDouble` | Float types | +| `SetBool` | `bool` | +| `SetString` | `string` | +| `SetColor` | `Color` | +| `SetRect` / `SetRectInt` | `Rect` / `RectInt` | +| `SetBounds` / `SetBoundsInt` | `Bounds` / `BoundsInt` | +| `SetVector2` / `SetVector2Int` | `Vector2` / `Vector2Int` | +| `SetVector3` / `SetVector3Int` | `Vector3` / `Vector3Int` | +| `SetVector4` | `Vector4` | +| `SetQuaternion` | `Quaternion` | +| `SetGradient` | `Gradient` | +| `SetHash128` | `Hash128` | +| `SetAnimationCurveValue` | `AnimationCurve` | +| `SetEnumFlag` / `SetEnumIndex` | Enum flag/index | +| `SetArraySize` | Array size | +| `SetManagedReference` | Managed reference | +| `SetObjectReference` | `UnityEngine.Object` | +| `SetExposedReference` | Exposed reference | +| `SetBoxed` | Boxed value *(Unity 6+)* | +| `SetEntityId` | Entity ID *(Unity 6.2+)* | + +```csharp +SerializedProperty property = GetProperty(); + +// Simple apply +property.ApplyModifiedProperties(); + +// Set and apply — equivalent forms +property.SetValue(10).ApplyModifiedProperties(); +property.SetValueAndApply(10); +property.SetInt(10).ApplyModifiedProperties(); +property.SetIntAndApply(10); + +// Chain multiple setters +property.SetVector3(Vector3.up).SetBool(true).ApplyModifiedProperties(); +``` + +--- + +## IMGUI Layout Scopes + +```csharp +using Aspid.FastTools.Editors; +``` + +Three scope types are available: `VerticalScope`, `HorizontalScope`, `ScrollViewScope`. Each exposes a `Rect` property and calls the matching `EditorGUILayout.End*` method on `Dispose`. + +### Usage via AspidEditorGUILayout + +```csharp +using (AspidEditorGUILayout.BeginVertical()) +{ + EditorGUILayout.LabelField("Item 1"); + EditorGUILayout.LabelField("Item 2"); +} + +using (AspidEditorGUILayout.BeginHorizontal()) +{ + EditorGUILayout.LabelField("Left"); + EditorGUILayout.LabelField("Right"); +} + +var scrollPos = Vector2.zero; +using (AspidEditorGUILayout.BeginScrollView(ref scrollPos)) +{ + EditorGUILayout.LabelField("Scrollable content"); +} +``` + +### Usage via scope structs directly + +```csharp +using (VerticalScope.Begin()) { /* ... */ } +using (HorizontalScope.Begin()) { /* ... */ } +using (ScrollViewScope.Begin(ref scrollPos)) { /* ... */ } +``` + +All `Begin` overloads match the corresponding `EditorGUILayout.Begin*` signatures (with optional `GUIStyle`, `GUILayoutOption[]`, scroll view options, etc.). + +--- + +## VisualElement Extensions + +Fluent extension methods for building UIToolkit trees in code. All methods return `T` (the element itself) for chaining. + +```csharp +using Aspid.FastTools; // runtime extensions +using Aspid.FastTools.Editors; // editor-only extensions +``` + +### Core element operations + +```csharp +element + .SetName("MyElement") + .SetVisible(true) + .SetTooltip("Tooltip text") + .AddChild(new Label("Hello")) + .AddChildIfNotNull(optionalChild) + .AddChildren(child1, child2, child3); +``` + +| Method | Description | +|--------|-------------| +| `SetName(string)` | Sets `element.name` | +| `SetVisible(bool)` | Sets `display` style to `Flex` or `None` | +| `SetTooltip(string)` | Sets `element.tooltip` | +| `AddChild(VisualElement)` | Appends a child, returns the parent | +| `AddChildIfNotNull(VisualElement)` | Appends only if not null | +| `AddChildren(params VisualElement[])` | Appends multiple children | +| `AddChildren(IEnumerable)` | Appends from a sequence | +| `SetFocus()` | Focuses the element | +| `IsFocus()` | Returns whether the element is focused | + +> `RegisterCallbackOnce` and `RegisterCallbackOnce` are available on Unity 2023.1+. + +### Style extensions — by category + +All style methods are also available on `IStyle` directly (same method names, operate on the style object). + +#### Layout + +| Method | Style property | +|--------|---------------| +| `SetFlexBasis(StyleLength)` | `flexBasis` | +| `SetFlexGrow(StyleFloat)` | `flexGrow` | +| `SetFlexShrink(StyleFloat)` | `flexShrink` | +| `SetFlexWrap(StyleEnum)` | `flexWrap` | +| `SetFlexDirection(FlexDirection)` | `flexDirection` | +| `SetAlignSelf(StyleEnum)` | `alignSelf` | +| `SetAlignItems(StyleEnum)` | `alignItems` | +| `SetAlignContent(StyleEnum)` | `alignContent` | +| `SetJustifyContent(StyleEnum)` | `justifyContent` | +| `SetPosition(StyleEnum)` | `position` | + +#### Size + +| Method | Description | +|--------|-------------| +| `SetSize(StyleLength)` | Sets both width and height | +| `SetSize(width?, height?)` | Sets width and/or height independently | +| `SetMinSize(StyleLength)` | Sets both minWidth and minHeight | +| `SetMinSize(width?, height?)` | | +| `SetMaxSize(StyleLength)` | Sets both maxWidth and maxHeight | +| `SetMaxSize(width?, height?)` | | + +#### Spacing + +All spacing methods have a uniform-value overload and a per-side overload (`top`, `bottom`, `left`, `right`). + +| Method | Style properties | +|--------|----------------------------------------------------| +| `SetMargin(…)` | `Top/Bottom/Left/Right` | +| `SetPadding(…)` | `Top/Bottom/Left/Right` | +| `SetDistance(…)` | `Top/Bottom/Left/Right` (absolute position offset) | + +#### Font + +| Method | Style property | +|--------|---------------| +| `SetUnityFont(StyleFont)` | `unityFont` | +| `SetFontSize(StyleLength)` | `fontSize` | +| `SetUnityFontDefinition(StyleFontDefinition)` | `unityFontDefinition` | +| `SetUnityFontStyleAndWeight(StyleEnum)` | `unityFontStyleAndWeight` | + +#### Text + +| Method | Style property | Notes | +|--------|---------------|-------| +| `SetWorldSpacing(StyleLength)` | `wordSpacing` | | +| `SetLetterSpacing(StyleLength)` | `letterSpacing` | | +| `SetUnityTextAlign(TextAnchor)` | `unityTextAlign` | | +| `SetTextShadow(StyleTextShadow)` | `textShadow` | | +| `SetUnityTextOutlineColor(StyleColor)` | `unityTextOutlineColor` | | +| `SetUnityTextOutlineWidth(StyleFloat)` | `unityTextOutlineWidth` | | +| `SetUnityParagraphSpacing(StyleLength)` | `unityParagraphSpacing` | | +| `SetTextOverflow(StyleEnum)` | `textOverflow` | | +| `SetUnityTextOverflowPosition(TextOverflowPosition)` | `unityTextOverflowPosition` | | +| `SetUnityTextGenerator(TextGeneratorType)` | `unityTextGenerator` | Unity 6+ | +| `SetUnityEditorTextRenderingMode(EditorTextRenderingMode)` | `unityEditorTextRenderingMode` | Unity 6+ | +| `SetUnityTextAutoSize(StyleTextAutoSize)` | `unityTextAutoSize` | Unity 6.2+ | +| `SetWhiteSpace(StyleEnum)` | `whiteSpace` | | + +#### Color & Opacity + +| Method | Style property | +|--------|---------------| +| `SetColor(StyleColor)` | `color` | +| `SetOpacity(StyleFloat)` | `opacity` | + +#### Border + +| Method | Description | +|--------|-------------| +| `SetBorderColor(StyleColor)` | All sides | +| `SetBorderColor(top?, bottom?, left?, right?)` | Per side | +| `SetBorderRadius(StyleLength)` | All corners | +| `SetBorderRadius(topLeft?, topRight?, bottomLeft?, bottomRight?)` | Per corner | +| `SetBorderWidth(StyleFloat)` | All sides | +| `SetBorderWidth(top?, bottom?, left?, right?)` | Per side | + +#### Background + +| Method | Style property | +|--------|---------------| +| `SetBackgroundColor(StyleColor)` | `backgroundColor` | +| `SetBackgroundImage(StyleBackground)` | `backgroundImage` | +| `SetBackgroundSize(StyleBackgroundSize)` | `backgroundSize` | +| `SetBackgroundRepeat(StyleBackgroundRepeat)` | `backgroundRepeat` | +| `SetBackgroundPosition(StyleBackgroundPosition)` | Both X and Y | +| `SetBackgroundPosition(x?, y?)` | Independently | +| `SetUnityBackgroundImageTintColor(StyleColor)` | `unityBackgroundImageTintColor` | + +#### Transform + +| Method | Style property | +|--------|---------------| +| `SetScale(StyleScale)` | `scale` | +| `SetRotate(StyleRotate)` | `rotate` | +| `SetTranslate(StyleTranslate)` | `translate` | +| `SetTransformOrigin(StyleTransformOrigin)` | `transformOrigin` | + +#### Transition + +| Method | Style property | +|--------|---------------| +| `SetTransitionDelay(StyleList)` | `transitionDelay` | +| `SetTransitionDuration(StyleList)` | `transitionDuration` | +| `SetTransitionProperty(StyleList)` | `transitionProperty` | +| `SetTransitionTimingFunction(StyleList)` | `transitionTimingFunction` | + +#### Overflow & Visibility + +| Method | Style property | +|--------|---------------| +| `SetOverflow(StyleEnum)` | `overflow` | +| `SetUnityOverflowClipBox(StyleEnum)` | `unityOverflowClipBox` | +| `SetVisibility(StyleEnum)` | `visibility` | +| `SetDisplay(DisplayStyle)` | `display` | + +#### Unity Slice + +| Method | Description | +|--------|-------------| +| `SetUnitySlice(StyleInt)` | All sides | +| `SetUnitySlice(top?, bottom?, left?, right?)` | Per side | +| `SetUnitySliceType(StyleEnum)` | Unity 6+ | + +#### Cursor + +| Method | Style property | +|--------|---------------| +| `SetCursor(StyleCursor)` | `cursor` | + +### Specialized element extensions + +#### TextElement + +```csharp +label.SetText("Hello World"); +``` + +#### BaseField\ + +```csharp +field.SetLabel("My Field"); +field.SetValue(42); +``` + +#### HelpBox + +```csharp +helpBox.SetHelpBoxFontSize(14); +helpBox.SetMessageType(14, HelpBoxMessageType.Warning); +``` + +#### Foldout + +```csharp +foldout.SetText("Section Title"); +foldout.SetValue(true); +``` + +#### Image + +```csharp +image.SetImage(myTexture); +image.SetImageFromResource("Editor/MyIcon"); // loads via Resources.Load +``` + +#### ListView / CollectionView + +| Method | Description | Notes | +|--------|-------------|-------| +| `SetBindItem(Action)` | Item binding callback | | +| `SetMakeItem(Func)` | Item factory | | +| `SetMakeFooter(Func)` | Footer factory | Unity 6+ | +| `SetMakeHeader(Func)` | Header factory | Unity 6+ | +| `SetMakeNoneElement(Func)` | Empty state element factory | Unity 6+ | + +### Editor commands (editor-only) + +```csharp +using Aspid.FastTools.Editors; + +image.AddOpenScriptCommand(target); +// Double-clicking the element opens the script for 'target' in the IDE +``` + +### Full example + +```csharp +using UnityEditor; +using UnityEngine; +using Aspid.FastTools; +using Aspid.FastTools.Editors; +using UnityEngine.UIElements; + +[CustomEditor(typeof(MyBehaviour))] +public class MyBehaviourEditor : Editor +{ + public override VisualElement CreateInspectorGUI() + { + const string iconPath = "Editor/MyIcon"; + + var scriptName = target.GetScriptName(); + var dark = new Color(0.15f, 0.15f, 0.15f); + var light = new Color(0.75f, 0.75f, 0.75f); + + return new VisualElement() + .SetName("Header") + .SetBackgroundColor(dark) + .SetFlexDirection(FlexDirection.Row) + .SetPadding(top: 5, bottom: 5, left: 10, right: 10) + .SetBorderRadius(topLeft: 10, topRight: 10, bottomLeft: 10, bottomRight: 10) + .AddChild(new Image() + .SetName("Icon") + .AddOpenScriptCommand(target) + .SetImageFromResource(iconPath) + .SetSize(width: 40, height: 40)) + .AddChild(new Label(scriptName) + .SetName("Title") + .SetFlexGrow(1) + .SetFontSize(16) + .SetMargin(left: 10) + .SetColor(light) + .SetAlignSelf(Align.Center) + .SetOverflow(Overflow.Hidden) + .SetWhiteSpace(WhiteSpace.NoWrap) + .SetTextOverflow(TextOverflow.Ellipsis) + .SetUnityFontStyleAndWeight(FontStyle.Bold)); + } +} +``` + +### Result + +![Aspid.FastTools.VisualElement.png](Images/Aspid.FastTools.VisualElement.png) + +--- + +## Editor Helper Extensions + +Utility methods for getting display names of Unity objects in custom editors. + +```csharp +using Aspid.FastTools.Editors; +``` + +```csharp +public static string GetScriptName(this Object obj) +``` + +Returns the display name of a Unity object: +- If the type has `[AddComponentMenu]`, returns `ObjectNames.GetInspectorTitle(obj)` +- Otherwise returns `ObjectNames.NicifyVariableName(typeName)` + +```csharp +public static string GetScriptNameWithIndex(this Component targetComponent) +``` + +Returns the display name with a count suffix when multiple components of the same type exist on the same GameObject. For example, if two `AudioSource` components are attached, the second returns `"Audio Source (2)"`. + +```csharp +[CustomEditor(typeof(MyBehaviour))] +public class MyBehaviourEditor : Editor +{ + public override VisualElement CreateInspectorGUI() + { + // "My Behaviour" — or "Custom Name" if [AddComponentMenu("Custom Name")] is present + var name = target.GetScriptName(); + + // "My Behaviour (2)" when a second component of the same type exists + var nameWithIndex = ((Component)target).GetScriptNameWithIndex(); + + return new Label(name); + } +} +``` diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/README.md.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README.md.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Documentation/README.md.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README.md.meta diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README_RU.md b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README_RU.md new file mode 100644 index 0000000..38b0f54 --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README_RU.md @@ -0,0 +1,637 @@ +# Aspid.FastTools + +**Aspid.FastTools** — набор инструментов, предназначенных для минимизации рутинного написания кода в Unity. + +## Исходный код + +[[Aspid.FastTools](https://github.com/VPDPersonal/Aspid.FastTools)] + +--- + +## Интеграция + +Установите Aspid.FastTools одним из следующих способов: + +- **Скачать .unitypackage** — Перейдите на [страницу релизов GitHub](https://github.com/VPDPersonal/Aspid.FastTools/releases) и скачайте последнюю версию `Aspid.FastTools.X.X.X.unitypackage`. Импортируйте его в проект. +- **Через UPM** (Unity Package Manager) подключите следующие пакеты: + - `https://github.com/VPDPersonal/Aspid.Internal.Unity.git` + - `https://github.com/VPDPersonal/Aspid.FastTools.git?path=Aspid.FastTools/Assets/Plugins/Aspid/FastTools` + +--- + +## Пространства имён + +| Пространство имён | Описание | +|-------------------|----------| +| `Aspid.FastTools` | Runtime API — типы, расширения VisualElement | +| `Aspid.FastTools.Editors` | Editor-only API — property drawers, IMGUI-области, расширения редактора | + +--- + +## ProfilerMarker + +Предоставляет регистрацию `ProfilerMarker` через source generation. Генератор создаёт статический маркер для каждого места вызова, идентифицируемый по вызывающему методу и номеру строки. + +```csharp +using UnityEngine; +using Aspid.FastTools; + +public class MyBehaviour : MonoBehaviour +{ + private void Update() + { + DoSomething1(); + DoSomething2(); + } + + private void DoSomething1() + { + using var _ = this.Marker(); + // Некоторый код + } + + private void DoSomething2() + { + using (this.Marker()) + { + // Некоторый код + using var _ = this.Marker().WithName("Calculate"); + // Некоторый код + } + } +} +``` + +### Сгенерированный код + +```csharp +using System; +using Unity.Profiling; +using System.Runtime.CompilerServices; + +internal static class __MyBehaviourProfilerMarkerExtensions +{ + private static readonly ProfilerMarker DoSomething1_line_13 = new("MyBehaviour.DoSomething1 (13)"); + private static readonly ProfilerMarker DoSomething2_line_19 = new("MyBehaviour.DoSomething2 (19)"); + private static readonly ProfilerMarker DoSomething2_line_22 = new("MyBehaviour.Calculate (22)"); + + public static ProfilerMarker.AutoScope Marker(this MyBehaviour _, [CallerLineNumberAttribute] int line = -1) + { + if (line is 13) return DoSomething1_line_13.Auto(); + if (line is 19) return DoSomething2_line_19.Auto(); + if (line is 22) return DoSomething2_line_22.Auto(); + + throw new Exception(); + } +} +``` + +### Результат + +![Aspid.FastTools.ProfilerMarkers.png](Images/Aspid.FastTools.ProfilerMarkers.png) + +--- + +## Система сериализуемых типов + +Позволяет сериализовать ссылку на `System.Type` в Unity Inspector. Выбранный тип хранится как assembly-qualified name и разрешается лениво при первом обращении. + +### SerializableType + +Доступны два варианта: + +- **`SerializableType`** — хранит любой тип (базовый тип — `object`) +- **`SerializableType`** — хранит тип, ограниченный `T` или его подклассами + +Оба поддерживают неявное преобразование в `System.Type`. + +```csharp +using UnityEngine; +using Aspid.FastTools; + +public class MyBehaviour : MonoBehaviour +{ + [SerializeField] private SerializableType _anyType; + [SerializeField] private SerializableType _behaviourType; + + private void Start() + { + Type type1 = _anyType; // неявный оператор + Type type2 = _behaviourType.Type; // явное свойство + + var instance = (MonoBehaviour)gameObject.AddComponent(type2); + } +} +``` +![Aspid.FastTools.SerializableType.png](Images/Aspid.FastTools.SerializableType.png) +### TypeSelectorAttribute + +Атрибут `PropertyAttribute`, доступный только в редакторе, ограничивающий всплывающее окно выбора типа конкретными базовыми типами. Применяется к полям `string`, хранящим assembly-qualified имена типов. + +```csharp +[Conditional("UNITY_EDITOR")] +public sealed class TypeSelectorAttribute : PropertyAttribute +{ + public TypeSelectorAttribute() // базовый тип: object + public TypeSelectorAttribute(Type type) + public TypeSelectorAttribute(params Type[] types) + public TypeSelectorAttribute(string assemblyQualifiedName) + public TypeSelectorAttribute(params string[] assemblyQualifiedNames) +} +``` + +```csharp +using UnityEngine; +using Aspid.FastTools; + +public class MyBehaviour : MonoBehaviour +{ + [TypeSelector(typeof(IMyInterface))] + [SerializeField] private string _typeName; +} +``` + +### Окно выбора типа + +В Inspector отображается кнопка, открывающая всплывающее окно с поиском, которое включает: + +- Иерархическую организацию по пространствам имён +- Текстовый поиск с фильтрацией +- Навигацию с клавиатуры (стрелки, Enter, Escape) +- Историю навигации (кнопка «назад») +- Разрешение неоднозначности для типов с одинаковыми именами из разных сборок + +![Aspid.FastTools.TypeSelectorWindow.png](Images/Aspid.FastTools.TypeSelectorWindow.png) +--- + +## Система перечислений + +Предоставляет сериализуемые отображения enum → значение, настраиваемые через Inspector. + +### EnumValues\ + +Сериализуемая коллекция записей `EnumValue` с настраиваемым значением по умолчанию. Реализует `IEnumerable>`. + +```csharp +[Serializable] +public sealed class EnumValues : IEnumerable> +``` + +| Член | Описание | +|------|----------| +| `TValue GetValue(Enum enumValue)` | Возвращает сопоставленное значение или `_defaultValue`, если не найдено | +| `bool Equals(Enum, Enum)` | Проверка равенства с поддержкой `[Flags]` | + +Поддерживает `[Flags]`-перечисления: `Equals` использует `HasFlag` и корректно обрабатывает члены со значением `0`. + +```csharp +using UnityEngine; +using Aspid.FastTools; + +public enum Direction { Left, Right, Up, Down } + +public class MyBehaviour : MonoBehaviour +{ + [SerializeField] private EnumValues _directionSprites; + + private void SetIcon(Direction dir) + { + var sprite = _directionSprites.GetValue(dir); + _image.sprite = sprite; + } +} +``` + +В Inspector выберите тип перечисления в заголовке `EnumValues`, затем назначьте значение для каждого члена перечисления. + +--- + +## Расширения SerializedProperty + +Цепочечные методы расширения для `SerializedProperty`, позволяющие задавать значения и применять изменения. + +```csharp +using Aspid.FastTools.Editors; +``` + +### Update и Apply + +```csharp +property.Update(); +property.UpdateIfRequiredOrScript(); +property.ApplyModifiedProperties(); +``` + +Все методы возвращают `SerializedProperty`, что позволяет строить цепочки вызовов. + +### SetValue / SetXxx + +Для каждого поддерживаемого типа доступны два метода: + +- `SetXxx(value)` — устанавливает значение, возвращает `property` для цепочки +- `SetXxxAndApply(value)` — устанавливает значение и сразу вызывает `ApplyModifiedProperties()` + +`SetValue(value)` автоматически направляет вызов к соответствующему типизированному сеттеру. + +| Семейство методов | Тип Unity | +|-------------------|-----------| +| `SetInt` / `SetUint` / `SetLong` / `SetUlong` | Целочисленные типы | +| `SetFloat` / `SetDouble` | Вещественные типы | +| `SetBool` | `bool` | +| `SetString` | `string` | +| `SetColor` | `Color` | +| `SetRect` / `SetRectInt` | `Rect` / `RectInt` | +| `SetBounds` / `SetBoundsInt` | `Bounds` / `BoundsInt` | +| `SetVector2` / `SetVector2Int` | `Vector2` / `Vector2Int` | +| `SetVector3` / `SetVector3Int` | `Vector3` / `Vector3Int` | +| `SetVector4` | `Vector4` | +| `SetQuaternion` | `Quaternion` | +| `SetGradient` | `Gradient` | +| `SetHash128` | `Hash128` | +| `SetAnimationCurveValue` | `AnimationCurve` | +| `SetEnumFlag` / `SetEnumIndex` | Флаг/индекс перечисления | +| `SetArraySize` | Размер массива | +| `SetManagedReference` | Управляемая ссылка | +| `SetObjectReference` | `UnityEngine.Object` | +| `SetExposedReference` | Exposed reference | +| `SetBoxed` | Упакованное значение *(Unity 6+)* | +| `SetEntityId` | Entity ID *(Unity 6.2+)* | + +```csharp +SerializedProperty property = GetProperty(); + +// Простое применение +property.ApplyModifiedProperties(); + +// Установка и применение — эквивалентные формы +property.SetValue(10).ApplyModifiedProperties(); +property.SetValueAndApply(10); +property.SetInt(10).ApplyModifiedProperties(); +property.SetIntAndApply(10); + +// Цепочка нескольких сеттеров +property.SetVector3(Vector3.up).SetBool(true).ApplyModifiedProperties(); +``` + +--- + +## IMGUI-области разметки + +```csharp +using Aspid.FastTools.Editors; +``` + +Доступны три типа областей: `VerticalScope`, `HorizontalScope`, `ScrollViewScope`. Каждая предоставляет свойство `Rect` и вызывает соответствующий метод `EditorGUILayout.End*` в `Dispose`. + +### Использование через AspidEditorGUILayout + +```csharp +using (AspidEditorGUILayout.BeginVertical()) +{ + EditorGUILayout.LabelField("Item 1"); + EditorGUILayout.LabelField("Item 2"); +} + +using (AspidEditorGUILayout.BeginHorizontal()) +{ + EditorGUILayout.LabelField("Left"); + EditorGUILayout.LabelField("Right"); +} + +var scrollPos = Vector2.zero; +using (AspidEditorGUILayout.BeginScrollView(ref scrollPos)) +{ + EditorGUILayout.LabelField("Scrollable content"); +} +``` + +### Использование через структуры областей напрямую + +```csharp +using (VerticalScope.Begin()) { /* ... */ } +using (HorizontalScope.Begin()) { /* ... */ } +using (ScrollViewScope.Begin(ref scrollPos)) { /* ... */ } +``` + +Все перегрузки `Begin` соответствуют сигнатурам `EditorGUILayout.Begin*` (с опциональными `GUIStyle`, `GUILayoutOption[]`, параметрами scroll view и т.д.). + +--- + +## Расширения VisualElement + +Fluent-методы расширения для построения UIToolkit-деревьев в коде. Все методы возвращают `T` (сам элемент) для цепочки вызовов. + +```csharp +using Aspid.FastTools; // runtime-расширения +using Aspid.FastTools.Editors; // editor-only расширения +``` + +### Основные операции с элементами + +```csharp +element + .SetName("MyElement") + .SetVisible(true) + .SetTooltip("Текст подсказки") + .AddChild(new Label("Hello")) + .AddChildIfNotNull(optionalChild) + .AddChildren(child1, child2, child3); +``` + +| Метод | Описание | +|-------|----------| +| `SetName(string)` | Устанавливает `element.name` | +| `SetVisible(bool)` | Устанавливает стиль `display` в `Flex` или `None` | +| `SetTooltip(string)` | Устанавливает `element.tooltip` | +| `AddChild(VisualElement)` | Добавляет дочерний элемент, возвращает родителя | +| `AddChildIfNotNull(VisualElement)` | Добавляет только если не null | +| `AddChildren(params VisualElement[])` | Добавляет несколько дочерних элементов | +| `AddChildren(IEnumerable)` | Добавляет из последовательности | +| `SetFocus()` | Устанавливает фокус на элемент | +| `IsFocus()` | Возвращает, находится ли элемент в фокусе | + +> `RegisterCallbackOnce` и `RegisterCallbackOnce` доступны начиная с Unity 2023.1+. + +### Расширения стилей — по категориям + +Все методы стилей также доступны напрямую на `IStyle` (те же имена методов, работают с объектом стиля). + +#### Разметка + +| Метод | Свойство стиля | +|-------|----------------| +| `SetFlexBasis(StyleLength)` | `flexBasis` | +| `SetFlexGrow(StyleFloat)` | `flexGrow` | +| `SetFlexShrink(StyleFloat)` | `flexShrink` | +| `SetFlexWrap(StyleEnum)` | `flexWrap` | +| `SetFlexDirection(FlexDirection)` | `flexDirection` | +| `SetAlignSelf(StyleEnum)` | `alignSelf` | +| `SetAlignItems(StyleEnum)` | `alignItems` | +| `SetAlignContent(StyleEnum)` | `alignContent` | +| `SetJustifyContent(StyleEnum)` | `justifyContent` | +| `SetPosition(StyleEnum)` | `position` | + +#### Размер + +| Метод | Описание | +|-------|----------| +| `SetSize(StyleLength)` | Устанавливает ширину и высоту одновременно | +| `SetSize(width?, height?)` | Устанавливает ширину и/или высоту независимо | +| `SetMinSize(StyleLength)` | Устанавливает minWidth и minHeight одновременно | +| `SetMinSize(width?, height?)` | | +| `SetMaxSize(StyleLength)` | Устанавливает maxWidth и maxHeight одновременно | +| `SetMaxSize(width?, height?)` | | + +#### Отступы + +Все методы отступов имеют перегрузку с единым значением и перегрузку по сторонам (`top`, `bottom`, `left`, `right`). + +| Метод | Свойства стиля | +|-------|----------------| +| `SetMargin(…)` | `Top/Bottom/Left/Right` | +| `SetPadding(…)` | `Top/Bottom/Left/Right` | +| `SetDistance(…)` | `Top/Bottom/Left/Right` (смещение для абсолютного позиционирования) | + +#### Шрифт + +| Метод | Свойство стиля | +|-------|----------------| +| `SetUnityFont(StyleFont)` | `unityFont` | +| `SetFontSize(StyleLength)` | `fontSize` | +| `SetUnityFontDefinition(StyleFontDefinition)` | `unityFontDefinition` | +| `SetUnityFontStyleAndWeight(StyleEnum)` | `unityFontStyleAndWeight` | + +#### Текст + +| Метод | Свойство стиля | Примечания | +|-------|---------------|------------| +| `SetWorldSpacing(StyleLength)` | `wordSpacing` | | +| `SetLetterSpacing(StyleLength)` | `letterSpacing` | | +| `SetUnityTextAlign(TextAnchor)` | `unityTextAlign` | | +| `SetTextShadow(StyleTextShadow)` | `textShadow` | | +| `SetUnityTextOutlineColor(StyleColor)` | `unityTextOutlineColor` | | +| `SetUnityTextOutlineWidth(StyleFloat)` | `unityTextOutlineWidth` | | +| `SetUnityParagraphSpacing(StyleLength)` | `unityParagraphSpacing` | | +| `SetTextOverflow(StyleEnum)` | `textOverflow` | | +| `SetUnityTextOverflowPosition(TextOverflowPosition)` | `unityTextOverflowPosition` | | +| `SetUnityTextGenerator(TextGeneratorType)` | `unityTextGenerator` | Unity 6+ | +| `SetUnityEditorTextRenderingMode(EditorTextRenderingMode)` | `unityEditorTextRenderingMode` | Unity 6+ | +| `SetUnityTextAutoSize(StyleTextAutoSize)` | `unityTextAutoSize` | Unity 6.2+ | +| `SetWhiteSpace(StyleEnum)` | `whiteSpace` | | + +#### Цвет и прозрачность + +| Метод | Свойство стиля | +|-------|----------------| +| `SetColor(StyleColor)` | `color` | +| `SetOpacity(StyleFloat)` | `opacity` | + +#### Рамка + +| Метод | Описание | +|-------|----------| +| `SetBorderColor(StyleColor)` | Все стороны | +| `SetBorderColor(top?, bottom?, left?, right?)` | По стороне | +| `SetBorderRadius(StyleLength)` | Все углы | +| `SetBorderRadius(topLeft?, topRight?, bottomLeft?, bottomRight?)` | По углу | +| `SetBorderWidth(StyleFloat)` | Все стороны | +| `SetBorderWidth(top?, bottom?, left?, right?)` | По стороне | + +#### Фон + +| Метод | Свойство стиля | +|-------|----------------| +| `SetBackgroundColor(StyleColor)` | `backgroundColor` | +| `SetBackgroundImage(StyleBackground)` | `backgroundImage` | +| `SetBackgroundSize(StyleBackgroundSize)` | `backgroundSize` | +| `SetBackgroundRepeat(StyleBackgroundRepeat)` | `backgroundRepeat` | +| `SetBackgroundPosition(StyleBackgroundPosition)` | X и Y одновременно | +| `SetBackgroundPosition(x?, y?)` | Независимо | +| `SetUnityBackgroundImageTintColor(StyleColor)` | `unityBackgroundImageTintColor` | + +#### Трансформации + +| Метод | Свойство стиля | +|-------|----------------| +| `SetScale(StyleScale)` | `scale` | +| `SetRotate(StyleRotate)` | `rotate` | +| `SetTranslate(StyleTranslate)` | `translate` | +| `SetTransformOrigin(StyleTransformOrigin)` | `transformOrigin` | + +#### Анимации переходов + +| Метод | Свойство стиля | +|-------|----------------| +| `SetTransitionDelay(StyleList)` | `transitionDelay` | +| `SetTransitionDuration(StyleList)` | `transitionDuration` | +| `SetTransitionProperty(StyleList)` | `transitionProperty` | +| `SetTransitionTimingFunction(StyleList)` | `transitionTimingFunction` | + +#### Переполнение и видимость + +| Метод | Свойство стиля | +|-------|----------------| +| `SetOverflow(StyleEnum)` | `overflow` | +| `SetUnityOverflowClipBox(StyleEnum)` | `unityOverflowClipBox` | +| `SetVisibility(StyleEnum)` | `visibility` | +| `SetDisplay(DisplayStyle)` | `display` | + +#### Unity Slice + +| Метод | Описание | +|-------|----------| +| `SetUnitySlice(StyleInt)` | Все стороны | +| `SetUnitySlice(top?, bottom?, left?, right?)` | По стороне | +| `SetUnitySliceType(StyleEnum)` | Unity 6+ | + +#### Курсор + +| Метод | Свойство стиля | +|-------|----------------| +| `SetCursor(StyleCursor)` | `cursor` | + +### Расширения для специализированных элементов + +#### TextElement + +```csharp +label.SetText("Hello World"); +``` + +#### BaseField\ + +```csharp +field.SetLabel("My Field"); +field.SetValue(42); +``` + +#### HelpBox + +```csharp +helpBox.SetHelpBoxFontSize(14); +helpBox.SetMessageType(14, HelpBoxMessageType.Warning); +``` + +#### Foldout + +```csharp +foldout.SetText("Section Title"); +foldout.SetValue(true); +``` + +#### Image + +```csharp +image.SetImage(myTexture); +image.SetImageFromResource("Editor/MyIcon"); // загрузка через Resources.Load +``` + +#### ListView / CollectionView + +| Метод | Описание | Примечания | +|-------|----------|------------| +| `SetBindItem(Action)` | Коллбэк привязки элемента | | +| `SetMakeItem(Func)` | Фабрика элементов | | +| `SetMakeFooter(Func)` | Фабрика подвала | Unity 6+ | +| `SetMakeHeader(Func)` | Фабрика заголовка | Unity 6+ | +| `SetMakeNoneElement(Func)` | Фабрика элемента пустого состояния | Unity 6+ | + +### Команды редактора (только для редактора) + +```csharp +using Aspid.FastTools.Editors; + +image.AddOpenScriptCommand(target); +// Двойной клик на элемент открывает скрипт 'target' в IDE +``` + +### Полный пример + +```csharp +using UnityEditor; +using UnityEngine; +using Aspid.FastTools; +using Aspid.FastTools.Editors; +using UnityEngine.UIElements; + +[CustomEditor(typeof(MyBehaviour))] +public class MyBehaviourEditor : Editor +{ + public override VisualElement CreateInspectorGUI() + { + const string iconPath = "Editor/MyIcon"; + + var scriptName = target.GetScriptName(); + var dark = new Color(0.15f, 0.15f, 0.15f); + var light = new Color(0.75f, 0.75f, 0.75f); + + return new VisualElement() + .SetName("Header") + .SetBackgroundColor(dark) + .SetFlexDirection(FlexDirection.Row) + .SetPadding(top: 5, bottom: 5, left: 10, right: 10) + .SetBorderRadius(topLeft: 10, topRight: 10, bottomLeft: 10, bottomRight: 10) + .AddChild(new Image() + .SetName("Icon") + .AddOpenScriptCommand(target) + .SetImageFromResource(iconPath) + .SetSize(width: 40, height: 40)) + .AddChild(new Label(scriptName) + .SetName("Title") + .SetFlexGrow(1) + .SetFontSize(16) + .SetMargin(left: 10) + .SetColor(light) + .SetAlignSelf(Align.Center) + .SetOverflow(Overflow.Hidden) + .SetWhiteSpace(WhiteSpace.NoWrap) + .SetTextOverflow(TextOverflow.Ellipsis) + .SetUnityFontStyleAndWeight(FontStyle.Bold)); + } +} +``` + +### Результат + +![Aspid.FastTools.VisualElement.png](Images/Aspid.FastTools.VisualElement.png) + +--- + +## Вспомогательные расширения для редактора + +Утилитарные методы для получения отображаемых имён объектов Unity в пользовательских редакторах. + +```csharp +using Aspid.FastTools.Editors; +``` + +```csharp +public static string GetScriptName(this Object obj) +``` + +Возвращает отображаемое имя объекта Unity: +- Если тип имеет `[AddComponentMenu]`, возвращает `ObjectNames.GetInspectorTitle(obj)` +- В противном случае возвращает `ObjectNames.NicifyVariableName(typeName)` + +```csharp +public static string GetScriptNameWithIndex(this Component targetComponent) +``` + +Возвращает отображаемое имя с числовым суффиксом, если на одном GameObject присутствует несколько компонентов одного типа. Например, если прикреплены два компонента `AudioSource`, второй вернёт `"Audio Source (2)"`. + +```csharp +[CustomEditor(typeof(MyBehaviour))] +public class MyBehaviourEditor : Editor +{ + public override VisualElement CreateInspectorGUI() + { + // "My Behaviour" — или "Custom Name", если присутствует [AddComponentMenu("Custom Name")] + var name = target.GetScriptName(); + + // "My Behaviour (2)" при наличии второго компонента того же типа + var nameWithIndex = ((Component)target).GetScriptNameWithIndex(); + + return new Label(name); + } +} +``` diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README_RU.md.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README_RU.md.meta new file mode 100644 index 0000000..a1ba8c4 --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Documentation/README_RU.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9b6c3feaf2078463b98fab80105c4ed8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/.DS_Store b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/.DS_Store new file mode 100644 index 0000000..195da16 Binary files /dev/null and b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/.DS_Store differ diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers.meta diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/.DS_Store b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/.DS_Store new file mode 100644 index 0000000..e5b3496 Binary files /dev/null and b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/.DS_Store differ diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scenes.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scenes.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scenes.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scenes.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scenes/Profiler Markers.unity b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scenes/Profiler Markers.unity similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scenes/Profiler Markers.unity rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scenes/Profiler Markers.unity diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scenes/Profiler Markers.unity.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scenes/Profiler Markers.unity.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scenes/Profiler Markers.unity.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scenes/Profiler Markers.unity.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/Aspid.UnityFastTools.ProfilerMarkers.asmdef b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/Aspid.FastTools.ProfilerMarkers.asmdef similarity index 87% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/Aspid.UnityFastTools.ProfilerMarkers.asmdef rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/Aspid.FastTools.ProfilerMarkers.asmdef index 5199cfd..4e65422 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/Aspid.UnityFastTools.ProfilerMarkers.asmdef +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/Aspid.FastTools.ProfilerMarkers.asmdef @@ -1,5 +1,5 @@ { - "name": "Aspid.UnityFastTools.ProfilerMarkers", + "name": "Aspid.FastTools.ProfilerMarkers", "rootNamespace": "", "references": [ "GUID:7c010b89992542508a6b6189977e64d4" diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/Aspid.UnityFastTools.ProfilerMarkers.asmdef.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/Aspid.FastTools.ProfilerMarkers.asmdef.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/Aspid.UnityFastTools.ProfilerMarkers.asmdef.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/Aspid.FastTools.ProfilerMarkers.asmdef.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/MarkerTest.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/MarkerTest.cs similarity index 93% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/MarkerTest.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/MarkerTest.cs index 9671e5a..795dce8 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/MarkerTest.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/MarkerTest.cs @@ -1,7 +1,7 @@ using UnityEngine; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools.Samples.ProfilerMarkers +namespace Aspid.FastTools.Samples.ProfilerMarkers { public class MarkerTest : MonoBehaviour { @@ -38,4 +38,4 @@ private static void Load() } } } -} +} \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/MarkerTest.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/MarkerTest.cs.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/ProfilerMarkers/Scripts/MarkerTest.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/ProfilerMarkers/Scripts/MarkerTest.cs.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types.meta diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/.DS_Store b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/.DS_Store new file mode 100644 index 0000000..6b3fe9a Binary files /dev/null and b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/.DS_Store differ diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Prefabs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Prefabs.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Prefabs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Prefabs.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Prefabs/TypeSelectorTest.prefab b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Prefabs/TypeSelectorTest.prefab similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Prefabs/TypeSelectorTest.prefab rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Prefabs/TypeSelectorTest.prefab diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Prefabs/TypeSelectorTest.prefab.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Prefabs/TypeSelectorTest.prefab.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Prefabs/TypeSelectorTest.prefab.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Prefabs/TypeSelectorTest.prefab.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Scripts.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Scripts.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Scripts.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Scripts.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Scripts/TypeSelectorTest.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Scripts/TypeSelectorTest.cs similarity index 92% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Scripts/TypeSelectorTest.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Scripts/TypeSelectorTest.cs index 3e826a2..f5ed25b 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Scripts/TypeSelectorTest.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Scripts/TypeSelectorTest.cs @@ -2,7 +2,7 @@ using UnityEngine; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools.Samples.Types +namespace Aspid.FastTools.Samples.Types { public class TypeSelectorTest : MonoBehaviour { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Scripts/TypeSelectorTest.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Scripts/TypeSelectorTest.cs.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/Types/Scripts/TypeSelectorTest.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/Types/Scripts/TypeSelectorTest.cs.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements.meta diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/.DS_Store b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/.DS_Store new file mode 100644 index 0000000..6c25a86 Binary files /dev/null and b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/.DS_Store differ diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scenes.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scenes.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scenes.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scenes.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scenes/Visual Elements.unity b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scenes/Visual Elements.unity similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scenes/Visual Elements.unity rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scenes/Visual Elements.unity diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scenes/Visual Elements.unity.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scenes/Visual Elements.unity.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scenes/Visual Elements.unity.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scenes/Visual Elements.unity.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts.meta diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Aspid.FastTools.VisualElements.asmdef b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Aspid.FastTools.VisualElements.asmdef new file mode 100644 index 0000000..23edd20 --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Aspid.FastTools.VisualElements.asmdef @@ -0,0 +1,14 @@ +{ + "name": "Aspid.FastTools.VisualElements", + "rootNamespace": "", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Aspid.UnityFastTools.VisualElements.asmdef.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Aspid.FastTools.VisualElements.asmdef.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Aspid.UnityFastTools.VisualElements.asmdef.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Aspid.FastTools.VisualElements.asmdef.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/Aspid.UnityFastTools.VisualElements.Editor.asmdef b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/Aspid.FastTools.VisualElements.Editor.asmdef similarity index 82% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/Aspid.UnityFastTools.VisualElements.Editor.asmdef rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/Aspid.FastTools.VisualElements.Editor.asmdef index ad6ee98..fb0cf80 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/Aspid.UnityFastTools.VisualElements.Editor.asmdef +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/Aspid.FastTools.VisualElements.Editor.asmdef @@ -1,9 +1,10 @@ { - "name": "Aspid.UnityFastTools.VisualElements.Editor", + "name": "Aspid.FastTools.VisualElements.Editor", "rootNamespace": "", "references": [ "GUID:7c010b89992542508a6b6189977e64d4", "GUID:94dcbbdbbd3ca48b891ee4fc8455c434", + "GUID:2490c3d9222b240a9a266351d52abca5", "GUID:0acbb74fa21d2442393a327f6c8d5639" ], "includePlatforms": [ diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/Aspid.UnityFastTools.VisualElements.Editor.asmdef.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/Aspid.FastTools.VisualElements.Editor.asmdef.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/Aspid.UnityFastTools.VisualElements.Editor.asmdef.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/Aspid.FastTools.VisualElements.Editor.asmdef.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs similarity index 90% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs index f285b95..e9be2cc 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs @@ -1,17 +1,18 @@ using UnityEditor; using UnityEngine; +using Aspid.Internal; using UnityEngine.UIElements; -using Aspid.UnityFastTools.Editors; +using Aspid.FastTools.Editors; // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools.Samples.VisualElements +namespace Aspid.FastTools.Samples.VisualElements { [CustomEditor(typeof(VisualElementInspector))] public class VisualElementInspectorEditor : Editor { public override VisualElement CreateInspectorGUI() { - const string iconPath = "Editor/Aspid.UnityFastTools Icon"; + const string iconPath = EditorConstants.AspidIconGreen; var scriptName = target.GetScriptName(); var darkColor = new Color(0.15f, 0.15f, 0.15f); diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/Editor/VisualElementInspectorEditor.cs.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/VisualElementInspector.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/VisualElementInspector.cs similarity index 70% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/VisualElementInspector.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/VisualElementInspector.cs index 5fc2626..8dca00e 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/VisualElementInspector.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/VisualElementInspector.cs @@ -1,7 +1,7 @@ using UnityEngine; // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools.Samples.VisualElements +namespace Aspid.FastTools.Samples.VisualElements { public sealed class VisualElementInspector : MonoBehaviour { } } \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/VisualElementInspector.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/VisualElementInspector.cs.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Samples/VisualElements/Scripts/VisualElementInspector.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Samples~/VisualElements/Scripts/VisualElementInspector.cs.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Aspid.UnityFastTools.Editor.asmdef b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Aspid.FastTools.Editor.asmdef similarity index 90% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Aspid.UnityFastTools.Editor.asmdef rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Aspid.FastTools.Editor.asmdef index c948561..a9dcadc 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Aspid.UnityFastTools.Editor.asmdef +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Aspid.FastTools.Editor.asmdef @@ -1,5 +1,5 @@ { - "name": "Aspid.UnityFastTools.Editor", + "name": "Aspid.FastTools.Editor", "rootNamespace": "", "references": [ "GUID:7c010b89992542508a6b6189977e64d4" diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Aspid.UnityFastTools.Editor.asmdef.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Aspid.FastTools.Editor.asmdef.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Aspid.UnityFastTools.Editor.asmdef.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Aspid.FastTools.Editor.asmdef.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuePropertyDrawer.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuePropertyDrawer.cs similarity index 96% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuePropertyDrawer.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuePropertyDrawer.cs index 7d83058..acc75a9 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuePropertyDrawer.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuePropertyDrawer.cs @@ -4,9 +4,9 @@ using UnityEngine.UIElements; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools.Editors { - // TODO Aspid.UnityFastTools – Refactor + // TODO Aspid.FastTools – Refactor [CustomPropertyDrawer(typeof(EnumValue<>))] public class EnumValuePropertyDrawer : PropertyDrawer { @@ -84,6 +84,8 @@ void UpdateValue() if (enumType.IsDefined(typeof(FlagsAttribute), false)) { keyEnumFlagField.SetDisplay(DisplayStyle.Flex); + + keyEnumFlagField.value = null; keyEnumFlagField.Init(enumValue); } else diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuePropertyDrawer.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuePropertyDrawer.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuePropertyDrawer.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuePropertyDrawer.cs.meta index adb9c1f..8abadc7 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuePropertyDrawer.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuePropertyDrawer.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuesPropertyDrawer.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuesPropertyDrawer.cs similarity index 87% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuesPropertyDrawer.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuesPropertyDrawer.cs index 30d1f09..ed21a47 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuesPropertyDrawer.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuesPropertyDrawer.cs @@ -4,9 +4,9 @@ using UnityEngine.UIElements; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools.Editors { - // TODO Aspid.UnityFastTools – Refactor + // TODO Aspid.FastTools – Refactor [CustomPropertyDrawer(typeof(EnumValues<>))] public sealed class EnumValuesPropertyDrawer : PropertyDrawer { @@ -46,15 +46,18 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) .SetBorderRadius(bottomLeft: _borderRadius, bottomRight: _borderRadius) .SetBorderWidth(bottom: _borderWidth, left: _borderWidth, right: _borderWidth); + var valuesField = new PropertyField(values); + valuesField.RegisterValueChangeCallback(_ => UpdateValues()); + container - .AddChild(new PropertyField(values) - .SetMargin(top: 5, bottom: 2, left: 17, right: 5)) + .AddChild(valuesField + .SetMargin(top: 5, bottom: 2, left: 10, right: 5)) .AddChild(new PropertyField(defaultValueProperty) .SetMargin(bottom: 5, left: 7, right: 7)); return root .AddChild(container) - .SetMargin(top: 2, bottom: 2, right: -2); + .SetMargin(top: 2, bottom: 2, right: 0); void UpdateValues() { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuesPropertyDrawer.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuesPropertyDrawer.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuesPropertyDrawer.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuesPropertyDrawer.cs.meta index b916aa2..6d819b6 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Enums/EnumValuesPropertyDrawer.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Enums/EnumValuesPropertyDrawer.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Extensions.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Extensions.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions.meta diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/EditorExtensions.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/EditorExtensions.cs new file mode 100644 index 0000000..c6e82b1 --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/EditorExtensions.cs @@ -0,0 +1,51 @@ +using System.Linq; +using UnityEditor; +using UnityEngine; + +// ReSharper disable CheckNamespace +namespace Aspid.FastTools.Editors +{ + public static class EditorExtensions + { + public static string GetScriptName(this Object obj) + { + if (!obj) return string.Empty; + + var targetType = obj.GetType(); + var attributes = targetType.GetCustomAttributes(false); + + return attributes.Any(attribute => attribute is AddComponentMenu) + ? ObjectNames.GetInspectorTitle(obj) + : ObjectNames.NicifyVariableName(targetType.Name); + } + + public static string GetScriptNameWithIndex(this Component targetComponent) + { + if (targetComponent is null) return null; + + var type = targetComponent.GetType(); + var components = targetComponent.GetComponents(type); + + switch (components.Length) + { + case 0: + case 1: return targetComponent.GetScriptName(); + default: + { + var index = 0; + + foreach (var component in components) + { + if (component.GetType() != type) continue; + + index++; + if (component == targetComponent) + return $"{targetComponent.GetScriptName()} ({index})"; + } + + return targetComponent.GetScriptName(); + } + } + } + } +} \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Extensions/EditorExtensions.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/EditorExtensions.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Extensions/EditorExtensions.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/EditorExtensions.cs.meta index 5f9b16e..70e938b 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Extensions/EditorExtensions.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/EditorExtensions.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/TypeExtensions.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/TypeExtensions.cs new file mode 100644 index 0000000..0c4ea63 --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/TypeExtensions.cs @@ -0,0 +1,62 @@ +using System; +using UnityEditor; +using UnityEngine; +using System.Text.RegularExpressions; + +// ReSharper disable once CheckNamespace +namespace Aspid.FastTools.Editors +{ + public static class TypeExtensions + { + public static (MonoScript script, int lineNumber) GetMonoScriptFromType(this Type type) + { + var isEnum = type.IsEnum; + var typeName = type.Name; + var typeNamespace = type.Namespace; + var scripts = Resources.FindObjectsOfTypeAll(); + + var regex = new Regex(GetPattern(isEnum, typeName)); + + foreach (var script in scripts) + { + if (script.GetClass() != type) continue; + + var line = FindTypeLineNumber(script.text, typeName, isEnum); + return (script, line); + } + + foreach (var script in scripts) + { + var text = script.text; + if (string.IsNullOrWhiteSpace(text)) continue; + if (!string.IsNullOrWhiteSpace(typeNamespace) && !text.Contains($"namespace {typeNamespace}")) continue; + if (!regex.IsMatch(text)) continue; + + var line = FindTypeLineNumber(text, typeName, isEnum); + return (script, line); + } + + return (script: null, lineNumber: 1); + } + + private static int FindTypeLineNumber(string text, string typeName, bool isEnum) + { + if (string.IsNullOrEmpty(text)) return 1; + + var regex = new Regex(GetPattern(isEnum, typeName)); + var lines = text.Split('\n'); + + for (var i = 0; i < lines.Length; i++) + { + if (regex.IsMatch(lines[i])) + return i + 1; + } + + return 1; + } + + private static string GetPattern(bool isEnum, string typeName) => isEnum + ? $@"\benum\s+{Regex.Escape(typeName)}\b" + : $@"\b(class|struct|record)\s+{Regex.Escape(typeName)}\b"; + } +} diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/TypeExtensions.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/TypeExtensions.cs.meta new file mode 100644 index 0000000..b57b300 --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Extensions/TypeExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 338f2589964a40118e510350f9e07667 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/AspidEditorGUILayout.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/AspidEditorGUILayout.cs similarity index 99% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/AspidEditorGUILayout.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/AspidEditorGUILayout.cs index 2b9bff9..fcfd63a 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/AspidEditorGUILayout.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/AspidEditorGUILayout.cs @@ -1,7 +1,7 @@ using UnityEngine; // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools.Editors +namespace Aspid.FastTools.Editors { public static class AspidEditorGUILayout { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/AspidEditorGUILayout.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/AspidEditorGUILayout.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/AspidEditorGUILayout.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/AspidEditorGUILayout.cs.meta index 13fe3e3..f89610a 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/AspidEditorGUILayout.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/AspidEditorGUILayout.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/HorizontalScope.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/HorizontalScope.cs similarity index 96% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/HorizontalScope.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/HorizontalScope.cs index 1a9a6b5..c7f255f 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/HorizontalScope.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/HorizontalScope.cs @@ -2,7 +2,7 @@ using UnityEngine; // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools.Editors +namespace Aspid.FastTools.Editors { public readonly ref struct HorizontalScope { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/HorizontalScope.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/HorizontalScope.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/HorizontalScope.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/HorizontalScope.cs.meta index 517c805..620036b 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/HorizontalScope.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/HorizontalScope.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/ScrollViewScope.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/ScrollViewScope.cs similarity index 99% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/ScrollViewScope.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/ScrollViewScope.cs index aab14a3..2fbd992 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/ScrollViewScope.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/ScrollViewScope.cs @@ -2,7 +2,7 @@ using UnityEngine; // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools.Editors +namespace Aspid.FastTools.Editors { public readonly ref struct ScrollViewScope { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/ScrollViewScope.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/ScrollViewScope.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/ScrollViewScope.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/ScrollViewScope.cs.meta index 80e38f3..d714d41 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/ScrollViewScope.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/ScrollViewScope.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/VerticalScope.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/VerticalScope.cs similarity index 96% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/VerticalScope.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/VerticalScope.cs index ce5fd9f..8bfc74d 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/VerticalScope.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/VerticalScope.cs @@ -2,7 +2,7 @@ using UnityEngine; // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools.Editors +namespace Aspid.FastTools.Editors { public readonly ref struct VerticalScope { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/VerticalScope.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/VerticalScope.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/VerticalScope.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/VerticalScope.cs.meta index 25f45cf..8a38afb 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/IMGUI/VerticalScope.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/IMGUI/VerticalScope.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs similarity index 99% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs index bac91c6..2e9e3d1 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs @@ -2,7 +2,7 @@ using UnityEngine; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools.Editors { public static partial class SerializePropertyExtensions { @@ -482,7 +482,7 @@ public static T SetValueAndApply(this T property, Vector3Int value) public static T SetVector3Int(this T property, Vector3Int value) where T : SerializedProperty { - property.vector3Value = value; + property.vector3IntValue = value; return property; } diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs.meta index 6a8e63d..e409c89 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.SetValue.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.cs similarity index 95% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.cs index bd62bbf..4e0c970 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.cs @@ -1,7 +1,7 @@ using UnityEditor; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools.Editors { public static partial class SerializePropertyExtensions { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.cs.meta index 23676da..6fb27c1 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/SerializedProperties/SerializePropertyExtensions.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/SerializedProperties/SerializePropertyExtensions.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeDrawer.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeDrawer.cs similarity index 53% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeDrawer.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeDrawer.cs index 3d6f1c7..e5f9484 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeDrawer.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeDrawer.cs @@ -5,40 +5,53 @@ using UnityEngine.UIElements; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools.Editors { internal static class SerializableTypeDrawer { private const string NoneOption = ""; private const string MissingOption = ""; - internal static void DrawIMGUI(Rect position, SerializedProperty property, GUIContent label, Type type) + internal static void DrawIMGUI(Rect position, SerializedProperty property, GUIContent label, params Type[] types) { + const float openButtonWidth = 50f; + if (!string.IsNullOrWhiteSpace(label.text)) { EditorGUI.LabelField(position, label); position.x += EditorGUIUtility.labelWidth; position.width -= EditorGUIUtility.labelWidth; } + + var dropdownRect = position; + var currentType = GetType(property.stringValue); + var hasValidType = currentType is not null; + + if (hasValidType) + dropdownRect.width -= openButtonWidth + 2f; var caption = GetCaption(property.stringValue); - if (EditorGUI.DropdownButton(position, new GUIContent(caption), FocusType.Passive)) + if (EditorGUI.DropdownButton(dropdownRect, new GUIContent(caption), FocusType.Passive)) { var current = property.stringValue ?? string.Empty; - var screenPosition = GUIUtility.GUIToScreenPoint(new Vector2(position.x, position.y)); - var screenRect = new Rect(screenPosition.x, screenPosition.y, position.width, position.height); + var screenPosition = GUIUtility.GUIToScreenPoint(new Vector2(dropdownRect.x, dropdownRect.y)); + var screenRect = new Rect(screenPosition.x, screenPosition.y, dropdownRect.width, dropdownRect.height); - TypeSelectorWindow.Show(type, screenRect, current, onSelected: assemblyQualifiedName => + TypeSelectorWindow.Show(types, screenRect, current, onSelected: assemblyQualifiedName => { property.SetStringAndApply(assemblyQualifiedName ?? string.Empty); }); } + + if (!hasValidType) return; + + var openButtonRect = new Rect(dropdownRect.xMax + 2f, position.y, openButtonWidth, position.height); + if (GUI.Button(openButtonRect, text: "Open")) + OpenScript(currentType); } - internal static VisualElement DrawUIToolkit(SerializedProperty property, string label, Type type) + internal static VisualElement DrawUIToolkit(SerializedProperty property, string label, params Type[] types) { - var propertyField = new PropertyField(property); - var typeSelector = new VisualElement() .SetFlexDirection(FlexDirection.Row) .AddChild(new PropertyField(property).SetDisplay(DisplayStyle.None)); @@ -46,40 +59,80 @@ internal static VisualElement DrawUIToolkit(SerializedProperty property, string var button = new Button() .SetMargin(0) .SetFlexGrow(1) + .SetFlexShrink(1) + .SetOverflow(Overflow.Hidden) + .SetWhiteSpace(WhiteSpace.NoWrap) .SetUnityTextAlign(TextAnchor.MiddleLeft) .SetText(GetCaption(property.stringValue)) + .SetTextOverflow(TextOverflow.Ellipsis) .SetTooltip(GetTooltip(property.stringValue)); var propertyPath = property.propertyPath; var serializedObject = property.serializedObject; + var openButton = new Button() + .SetText("Open") + .SetMargin(left: 4) + .SetDisplay(DisplayStyle.None); + button.clicked += () => { - var window = EditorWindow.focusedWindow; var worldBound = button.worldBound; var screenRect = new Rect(window.position.x + worldBound.xMin, window.position.y + worldBound.yMin, worldBound.width, worldBound.height); var current = GetProperty(serializedObject, propertyPath).stringValue ?? string.Empty; - TypeSelectorWindow.Show(type, screenRect, current, onSelected: assemblyQualifiedName => + TypeSelectorWindow.Show(types, screenRect, current, onSelected: assemblyQualifiedName => { var currentProperty = GetProperty(serializedObject, propertyPath); currentProperty.SetStringAndApply(assemblyQualifiedName ?? string.Empty); - button.SetText(GetCaption(currentProperty.stringValue)); - button.SetTooltip(GetTooltip(currentProperty.stringValue)); + button + .SetText(GetCaption(currentProperty.stringValue)) + .SetTooltip(GetTooltip(currentProperty.stringValue)); + + UpdateOpenButtonVisibility(openButton, currentProperty.stringValue); }); }; + + openButton.clicked += () => + { + var currentProperty = GetProperty(serializedObject, propertyPath); + var currentType = GetType(currentProperty.stringValue); + + if (currentType is not null) + OpenScript(currentType); + }; if (!string.IsNullOrEmpty(label)) { - typeSelector.AddChild(new Label(label) + typeSelector + .AddChild(new Label(label) .SetUnityTextAlign(TextAnchor.MiddleLeft) .SetMargin(right: 15)); } - - return typeSelector.AddChild(button); + + typeSelector + .AddChild(button) + .AddChild(openButton); + + UpdateOpenButtonVisibility(openButton, property.stringValue); + return typeSelector; + } + + private static void UpdateOpenButtonVisibility(Button openButton, string assemblyQualifiedName) + { + var hasValidType = !string.IsNullOrWhiteSpace(assemblyQualifiedName) && GetType(assemblyQualifiedName) is not null; + openButton.SetDisplay(hasValidType ? DisplayStyle.Flex : DisplayStyle.None); + } + + private static void OpenScript(Type type) + { + var (monoScript, lineNumber) = type.GetMonoScriptFromType(); + + if (monoScript is not null) + AssetDatabase.OpenAsset(monoScript, lineNumber); } private static SerializedProperty GetProperty(SerializedObject serializedObject, string propertyPath) => @@ -101,6 +154,6 @@ private static string GetCaption(string assemblyQualifiedName) } private static Type GetType(string assemblyQualifiedName) => - Type.GetType(assemblyQualifiedName, false); + Type.GetType(assemblyQualifiedName, throwOnError: false); } } \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeDrawer.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeDrawer.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeDrawer.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeDrawer.cs.meta index 6ac8f8a..b50a17a 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeDrawer.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeDrawer.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypePropertyDrawer.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypePropertyDrawer.cs similarity index 97% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypePropertyDrawer.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypePropertyDrawer.cs index bd97e31..3941b53 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypePropertyDrawer.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypePropertyDrawer.cs @@ -4,7 +4,7 @@ using UnityEngine.UIElements; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools.Editors { [CustomPropertyDrawer(typeof(SerializableType))] [CustomPropertyDrawer(typeof(SerializableType<>))] diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypePropertyDrawer.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypePropertyDrawer.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypePropertyDrawer.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypePropertyDrawer.cs.meta index 231aad9..49df607 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypePropertyDrawer.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypePropertyDrawer.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeUtility.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeUtility.cs similarity index 96% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeUtility.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeUtility.cs index 7bc9f99..3b5f847 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeUtility.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeUtility.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools.Editors { internal static class SerializableTypeUtility { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeUtility.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeUtility.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeUtility.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeUtility.cs.meta index 38dc2e4..9ec1ed5 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/SerializableTypeUtility.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/SerializableTypeUtility.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorPropertyDrawer.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorPropertyDrawer.cs new file mode 100644 index 0000000..034dbc5 --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorPropertyDrawer.cs @@ -0,0 +1,122 @@ +using System; +using System.Linq; +using UnityEditor; +using UnityEngine; +using System.Reflection; +using UnityEngine.UIElements; +using System.Collections.Generic; + +// ReSharper disable once CheckNamespace +namespace Aspid.FastTools.Editors +{ + [CustomPropertyDrawer(typeof(TypeSelectorAttribute))] + internal sealed class TypeSelectorPropertyDrawer : PropertyDrawer + { + private const BindingFlags BindingAttr = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var type = GetTypesFromAttribute(property); + SerializableTypeDrawer.DrawIMGUI(position, property, label, type); + } + + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var type = GetTypesFromAttribute(property); + return SerializableTypeDrawer.DrawUIToolkit(property, preferredLabel, type); + } + + private Type[] GetTypesFromAttribute(SerializedProperty property) + { + var typeSelectorAttribute = (TypeSelectorAttribute)attribute; + + var assemblyQualifiedNames = typeSelectorAttribute.AssemblyQualifiedNames + .Where(assemblyQualifiedName => !string.IsNullOrWhiteSpace(assemblyQualifiedName)) + .ToArray(); + + if (assemblyQualifiedNames.Length is 0) + return Array.Empty(); + + var targetObject = property.serializedObject.targetObject; + var targetType = targetObject.GetType(); + var types = new List(); + + foreach (var name in assemblyQualifiedNames) + { + var member = GetMemberFromHierarchy(targetType, name); + + if (member is not null) + { + AddTypesFromMember(types, member, targetObject); + } + else + { + var type = Type.GetType(name, throwOnError: false); + + if (type is not null) + types.Add(type); + } + } + + return types.ToArray(); + } + + private static MemberInfo GetMemberFromHierarchy(Type type, string memberName) + { + var currentType = type; + while (currentType is not null) + { + var members = currentType.GetMember(memberName, BindingAttr); + if (members.Length > 0) + return members[0]; + + currentType = currentType.BaseType; + } + return null; + } + + private static void AddTypesFromMember(List types, MemberInfo member, object targetObject) + { + var value = member switch + { + FieldInfo fieldInfo => fieldInfo.GetValue(targetObject), + PropertyInfo propertyInfo => propertyInfo.GetValue(targetObject), + _ => null + }; + + switch (value) + { + case null: return; + + case Type type: + types.Add(type); + return; + + case Type[] typeArray: + types.AddRange(typeArray); + return; + + case string assemblyQualifiedName: + { + var type = Type.GetType(assemblyQualifiedName, throwOnError: false); + if (type is not null) + types.Add(type); + return; + } + + case string[] assemblyQualifiedNames: + { + foreach (var assemblyQualifiedName in assemblyQualifiedNames) + { + if (string.IsNullOrWhiteSpace(assemblyQualifiedName)) continue; + + var type = Type.GetType(assemblyQualifiedName, throwOnError: false); + if (type is not null) + types.Add(type); + } + return; + } + } + } + } +} \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorPropertyDrawer.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorPropertyDrawer.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorPropertyDrawer.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorPropertyDrawer.cs.meta index 089036f..cc3ae52 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorPropertyDrawer.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorPropertyDrawer.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorWindow.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorWindow.cs similarity index 96% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorWindow.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorWindow.cs index f90c513..5231d6c 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorWindow.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorWindow.cs @@ -8,10 +8,10 @@ using System.Runtime.CompilerServices; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools.Editors { - // TODO Aspid.UnityFastTools - Refactor - // TODO Aspid.UnityFastTools - Write summary + // TODO Aspid.FastTools - Refactor + // TODO Aspid.FastTools - Write summary public sealed class TypeSelectorWindow : EditorWindow { private const string NoneOption = ""; @@ -26,21 +26,21 @@ public sealed class TypeSelectorWindow : EditorWindow private Action _onSelected; private string _currentAqn = string.Empty; - public static void Show(Type type, Rect screenRect, string currentAqn, Action onSelected) + public static void Show(Type[] types, Rect screenRect, string currentAqn, Action onSelected) { var window = CreateInstance(); - window.Initialize(type, screenRect, currentAqn, onSelected); + window.Initialize(types, screenRect, currentAqn, onSelected); } #region Initialization - private void Initialize(Type type, Rect screenRect, string currentAqn, Action onSelected) + private void Initialize(Type[] types, Rect screenRect, string currentAqn, Action onSelected) { _onSelected = onSelected; _currentAqn = currentAqn ?? string.Empty; BuildUI(); - var hierarchy = HierarchyBuilder.Build(type); + var hierarchy = HierarchyBuilder.Build(types); InitializeNavigation(hierarchy, _currentAqn); RefreshView(); @@ -287,16 +287,16 @@ private void RefreshView() #region Hierarchy Builder private static class HierarchyBuilder { - public static TreeNode Build(Type type) + public static TreeNode Build(Type[] types) { - // TODO Aspid.UnityFastTools – Get base type from attribute. - var types = TypeInfoScanner.GetAllTypeInfos(type); + // TODO Aspid.FastTools – Get base type from attribute. + var allTypes = TypeInfoScanner.GetAllTypeInfos(types); var root = new TreeNode("/"); root.Children.Add(new TreeNode(NoneOption, null, NoneOption)); - AddGlobalNamespaceGroup(root, types); - AddNamespaceHierarchy(root, types); + AddGlobalNamespaceGroup(root, allTypes); + AddNamespaceHierarchy(root, allTypes); return root; } @@ -522,7 +522,7 @@ public TypeInfo(Type type) private static class TypeInfoScanner { - public static List GetAllTypeInfos(Type baseType) + public static List GetAllTypeInfos(Type[] baseTypes) { var result = new List(); @@ -531,7 +531,7 @@ public static List GetAllTypeInfos(Type baseType) try { result.AddRange(assembly.GetTypes() - .Where(t => baseType.IsAssignableFrom(t) && + .Where(t => baseTypes.All(baseType => baseType.IsAssignableFrom(t)) && !t.IsDefined(typeof(CompilerGeneratedAttribute), false) && !t.Name.Contains("<") && !t.Name.Contains(">")) diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorWindow.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorWindow.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorWindow.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorWindow.cs.meta index 6f52ef0..81385f1 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/Types/TypeSelectorWindow.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/Types/TypeSelectorWindow.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements/Extensions.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements/Extensions.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements/Extensions.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements/Extensions.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs similarity index 96% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs index 5e1d484..4fda2d5 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs @@ -3,7 +3,7 @@ using UnityEngine.UIElements; // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools.Editors +namespace Aspid.FastTools.Editors { public static partial class VisualElementExtensions { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs.meta index f50d3e4..d6ed3bc 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Editor/VisualElements/Extensions/VisualElementExtensions.Commands.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Aspid.UnityFastTools.asmdef b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Aspid.FastTools.asmdef similarity index 89% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Aspid.UnityFastTools.asmdef rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Aspid.FastTools.asmdef index f0f15e4..464abad 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Aspid.UnityFastTools.asmdef +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Aspid.FastTools.asmdef @@ -1,5 +1,5 @@ { - "name": "Aspid.UnityFastTools", + "name": "Aspid.FastTools", "rootNamespace": "", "references": [], "includePlatforms": [], diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Aspid.UnityFastTools.asmdef.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Aspid.FastTools.asmdef.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Aspid.UnityFastTools.asmdef.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Aspid.FastTools.asmdef.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValue.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValue.cs similarity index 65% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValue.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValue.cs index e2b9733..68b60ce 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValue.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValue.cs @@ -4,10 +4,10 @@ using Unity.Collections.LowLevel.Unsafe; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools { [Serializable] - public sealed class EnumValue : EnumValue + public sealed class EnumValue { [SerializeField] private string _key; [SerializeField] private TValue _value; @@ -24,8 +24,8 @@ public sealed class EnumValue : EnumValue internal void Initialize(Type type) { - // TODO Aspid.UnityFastTools – Add Define for Marker - using (InitializeMarker.Auto()) + // TODO Aspid.FastTools – Add Define for Marker + using (EnumValue.InitializeMarker.Auto()) { if (Enum.TryParse(type, _key, out var parsedEnum)) { @@ -34,16 +34,16 @@ internal void Initialize(Type type) } else { - throw new Exception($"[{nameof(EnumValue)}] [{nameof(Initialize)}]" + + // Not Exception. Because this is a visual error. + Debug.LogError($"[{nameof(EnumValue)}] [{nameof(Initialize)}]" + $"Couldn't parse key '{_key}' to Enum '{nameof(type)}'"); } } } } - public abstract class EnumValue + internal static class EnumValue { - // TODO Aspid.UnityFastTools – Add Define for Marker - protected static readonly ProfilerMarker InitializeMarker = new($"{nameof(EnumValue)}.Initialize"); + public static readonly ProfilerMarker InitializeMarker = new($"{nameof(EnumValue)}.Initialize"); } } \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValue.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValue.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValue.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValue.cs.meta index a1d1cd5..8900311 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValue.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValue.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValues.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValues.cs similarity index 65% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValues.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValues.cs index e32a84c..e42d669 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValues.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValues.cs @@ -5,11 +5,11 @@ using System.Collections.Generic; // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools { - // TODO Aspid.UnityFastTools – Write summary + // TODO Aspid.FastTools – Write summary [Serializable] - public sealed class EnumValues : EnumValues, IEnumerable> + public sealed class EnumValues : IEnumerable> { [TypeSelector(typeof(Enum))] [SerializeField] private string _enumType; @@ -21,10 +21,9 @@ public sealed class EnumValues : EnumValues, IEnumerable GetEnumerator(); } - public abstract class EnumValues + internal static class EnumValues { - // TODO Aspid.UnityFastTools – Add Define for Marker - protected static readonly ProfilerMarker EqualsMarker = new($"{nameof(EnumValues)}.Equals"); - protected static readonly ProfilerMarker HasFlagMarker = new($"{nameof(EnumValues)}.HasFlag"); - protected static readonly ProfilerMarker GetValueMarker = new($"{nameof(EnumValues)}.GetValue"); - protected static readonly ProfilerMarker InitializeMarker = new($"{nameof(EnumValues)}.Initialize"); + public static readonly ProfilerMarker EqualsMarker = new($"{nameof(EnumValues)}.Equals"); + public static readonly ProfilerMarker HasFlagMarker = new($"{nameof(EnumValues)}.HasFlag"); + public static readonly ProfilerMarker GetValueMarker = new($"{nameof(EnumValues)}.GetValue"); + public static readonly ProfilerMarker InitializeMarker = new($"{nameof(EnumValues)}.Initialize"); } } \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValues.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValues.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValues.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValues.cs.meta index 00c9016..cea0735 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Enums/EnumValues.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Enums/EnumValues.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/ProfilerMarkers.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/ProfilerMarkers.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/ProfilerMarkers.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/ProfilerMarkers.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs.meta index 8d6e59f..773c484 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/ProfilerMarkers/ProfilerMarkerExtensionsForGenerator.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/SerializableType.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/SerializableType.cs similarity index 96% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/SerializableType.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/SerializableType.cs index bce35bb..3a08329 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/SerializableType.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/SerializableType.cs @@ -2,9 +2,9 @@ using System; using UnityEngine; -// TODO Aspid.UnityFastTools – Write Summary +// TODO Aspid.FastTools – Write Summary // ReSharper disable once CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools { [Serializable] public sealed class SerializableType diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/SerializableType.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/SerializableType.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/SerializableType.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/SerializableType.cs.meta index e802667..945c210 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/SerializableType.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/SerializableType.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/TypeSelectorAttribute.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/TypeSelectorAttribute.cs new file mode 100644 index 0000000..b3f829e --- /dev/null +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/TypeSelectorAttribute.cs @@ -0,0 +1,37 @@ +#nullable enable +using System; +using UnityEngine; +using System.Linq; +using System.Diagnostics; + +// TODO Aspid.FastTools – Write summary +// ReSharper disable once CheckNamespace +namespace Aspid.FastTools +{ + [Conditional(conditionString: "UNITY_EDITOR")] + public sealed class TypeSelectorAttribute : PropertyAttribute + { + public readonly string[] AssemblyQualifiedNames; + + public TypeSelectorAttribute() + : this(typeof(object)) { } + + public TypeSelectorAttribute(Type type) + : this(types: type) { } + + public TypeSelectorAttribute(params Type[] types) + { + AssemblyQualifiedNames = types + .Select(type => type.AssemblyQualifiedName) + .ToArray(); + } + + public TypeSelectorAttribute(string assemblyQualifiedName) + : this(assemblyQualifiedNames: assemblyQualifiedName) { } + + public TypeSelectorAttribute(params string[] assemblyQualifiedNames) + { + AssemblyQualifiedNames = assemblyQualifiedNames; + } + } +} \ No newline at end of file diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/TypeSelectorAttribute.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/TypeSelectorAttribute.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/TypeSelectorAttribute.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/TypeSelectorAttribute.cs.meta index ca02504..1531b12 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/Types/TypeSelectorAttribute.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/Types/TypeSelectorAttribute.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions.meta similarity index 100% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions.meta diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FieldExtensions.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FieldExtensions.cs similarity index 89% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FieldExtensions.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FieldExtensions.cs index 77412a8..f986e6b 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FieldExtensions.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FieldExtensions.cs @@ -1,8 +1,8 @@ using UnityEngine.UIElements; -// TODO Aspid.UnityFastTools +// TODO Aspid.FastTools // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools { public static class FieldExtensions { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FieldExtensions.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FieldExtensions.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FieldExtensions.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FieldExtensions.cs.meta index c74fbf5..f9e7ffd 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FieldExtensions.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FieldExtensions.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FoldoutExtensions.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FoldoutExtensions.cs similarity index 88% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FoldoutExtensions.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FoldoutExtensions.cs index 1a781b6..b04eb77 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FoldoutExtensions.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FoldoutExtensions.cs @@ -1,8 +1,8 @@ using UnityEngine.UIElements; -// TODO Aspid.UnityFastTools +// TODO Aspid.FastTools // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools { public static class FoldoutExtensions { diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FoldoutExtensions.cs.meta b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FoldoutExtensions.cs.meta similarity index 78% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FoldoutExtensions.cs.meta rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FoldoutExtensions.cs.meta index 74c8822..24557c6 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/FoldoutExtensions.cs.meta +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/FoldoutExtensions.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: daa63609570f146cfa1b178f6d6c8bda, type: 3} + icon: {fileID: 2800000, guid: 3f246f77b3b5a4b6ba0ab47ff519a0a9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/HelpBoxExtensions.cs b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/HelpBoxExtensions.cs similarity index 77% rename from Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/HelpBoxExtensions.cs rename to Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/HelpBoxExtensions.cs index bedf35e..5bd3f47 100644 --- a/Aspid.UnityFastTools/Assets/Plugins/Aspid/UnityFastTools/Source/Runtime/VisualElements/Extensions/HelpBoxExtensions.cs +++ b/Aspid.FastTools/Assets/Plugins/Aspid/FastTools/Unity/Runtime/VisualElements/Extensions/HelpBoxExtensions.cs @@ -1,12 +1,11 @@ using UnityEngine.UIElements; -// TODO Aspid.UnityFastTools // ReSharper disable CheckNamespace -namespace Aspid.UnityFastTools +namespace Aspid.FastTools { public static class HelpBoxExtensions { - public static T SetFontSize(this T helpBox, StyleLength value) + public static T SetHelpBoxFontSize(this T helpBox, StyleLength value) where T : HelpBox { helpBox.Q