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
+
+
+
+---
+
+## 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);
+ }
+}
+```
+
+### 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
+
+
+---
+
+## 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
+
+
+
+---
+
+## 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();
+ }
+}
+```
+
+### Результат
+
+
+
+---
+
+## Система сериализуемых типов
+
+Позволяет сериализовать ссылку на `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);
+ }
+}
+```
+
+### 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)
+- Историю навигации (кнопка «назад»)
+- Разрешение неоднозначности для типов с одинаковыми именами из разных сборок
+
+
+---
+
+## Система перечислений
+
+Предоставляет сериализуемые отображения 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));
+ }
+}
+```
+
+### Результат
+
+
+
+---
+
+## Вспомогательные расширения для редактора
+
+Утилитарные методы для получения отображаемых имён объектов 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