diff --git a/Alchemy/Assets/Alchemy/Editor/AlchemySettings.cs b/Alchemy/Assets/Alchemy/Editor/AlchemySettings.cs index be6bddc..9aecd49 100644 --- a/Alchemy/Assets/Alchemy/Editor/AlchemySettings.cs +++ b/Alchemy/Assets/Alchemy/Editor/AlchemySettings.cs @@ -68,6 +68,32 @@ internal static SettingsProvider CreateSettingsProvider() EditorGUILayout.PropertyField(serializedObject.FindProperty("hierarchyObjectMode")); EditorGUILayout.PropertyField(serializedObject.FindProperty("showHierarchyToggles"), new GUIContent("Show Toggles")); EditorGUILayout.PropertyField(serializedObject.FindProperty("showComponentIcons")); + var showTreeMap = serializedObject.FindProperty("showTreeMap"); + EditorGUILayout.PropertyField(showTreeMap); + if (showTreeMap.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serializedObject.FindProperty("treeMapColor"), new GUIContent("Color")); + EditorGUI.indentLevel--; + } + + var showSeparator = serializedObject.FindProperty("showSeparator"); + EditorGUILayout.PropertyField(showSeparator, new GUIContent("Show Row Separator")); + if (showSeparator.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serializedObject.FindProperty("separatorColor"), new GUIContent("Color")); + EditorGUI.indentLevel--; + var showRowShading = serializedObject.FindProperty("showRowShading"); + EditorGUILayout.PropertyField(showRowShading); + if (showRowShading.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serializedObject.FindProperty("evenRowColor")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("oddRowColor")); + EditorGUI.indentLevel--; + } + } if (changeCheck.changed) { @@ -84,9 +110,23 @@ internal static SettingsProvider CreateSettingsProvider() [SerializeField] HierarchyObjectMode hierarchyObjectMode = HierarchyObjectMode.RemoveInBuild; [SerializeField] bool showHierarchyToggles; [SerializeField] bool showComponentIcons; + [SerializeField] bool showTreeMap; + [SerializeField] Color treeMapColor = new(0.53f, 0.53f, 0.53f, 0.45f); + [SerializeField] bool showSeparator; + [SerializeField] bool showRowShading; + [SerializeField] Color separatorColor = new(0.19f, 0.19f, 0.19f, 0f); + [SerializeField] Color evenRowColor = new(0f, 0f, 0f, 0.07f); + [SerializeField] Color oddRowColor = Color.clear; public HierarchyObjectMode HierarchyObjectMode => hierarchyObjectMode; public bool ShowHierarchyToggles => showHierarchyToggles; public bool ShowComponentIcons => showComponentIcons; + public bool ShowTreeMap => showTreeMap; + public Color TreeMapColor => treeMapColor; + public bool ShowSeparator => showSeparator; + public bool ShowRowShading => showRowShading; + public Color SeparatorColor => separatorColor; + public Color EvenRowColor => evenRowColor; + public Color OddRowColor => oddRowColor; } } \ No newline at end of file diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyRowSeparatorDrawer.cs b/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyRowSeparatorDrawer.cs new file mode 100644 index 0000000..3ff57b9 --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyRowSeparatorDrawer.cs @@ -0,0 +1,24 @@ +using UnityEditor; +using UnityEngine; + +namespace Alchemy.Editor +{ + public class HierarchyRowSeparatorDrawer : HierarchyDrawer + { + public override void OnGUI(int instanceID, Rect selectionRect) + { + var settings = AlchemySettings.GetOrCreateSettings(); + if (!settings.ShowSeparator) return; + var rect = new Rect {y = selectionRect.y, width = selectionRect.width + selectionRect.x, height = 1, x = 0}; + + EditorGUI.DrawRect(rect, settings.SeparatorColor); + + if (!settings.ShowRowShading) return; + selectionRect.width += selectionRect.x; + selectionRect.x = 0; + selectionRect.height -= 1; + selectionRect.y += 1; + EditorGUI.DrawRect(selectionRect, Mathf.FloorToInt((selectionRect.y - 4) / 16 % 2) == 0 ? settings.EvenRowColor : settings.OddRowColor); + } + } +} \ No newline at end of file diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyRowSeparatorDrawer.cs.meta b/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyRowSeparatorDrawer.cs.meta new file mode 100644 index 0000000..508d8a4 --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyRowSeparatorDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22beb8e8fe26ffc47853979588eaf7c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyTreeMapDrawer.cs b/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyTreeMapDrawer.cs new file mode 100644 index 0000000..ab89d57 --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyTreeMapDrawer.cs @@ -0,0 +1,137 @@ +using System.Collections.Generic; +using Alchemy.Hierarchy; +using UnityEditor; +using UnityEngine; + +namespace Alchemy.Editor +{ + public class HierarchyTreeMapDrawer : HierarchyDrawer + { + private static readonly Dictionary TextureCached = new(); + + public static Texture2D TreeMapCurrent + { + get + { + TextureCached.TryGetValue(nameof(TreeMapCurrent), out var tex); + + if (tex != null) return tex; + tex = AssetHelper.FindAssetWithPath("tree_map_current.png", "Editor/Hierarchy/Textures"); + TextureCached[nameof(TreeMapCurrent)] = tex; + return tex; + } + } + + public static Texture2D TreeMapLast + { + get + { + TextureCached.TryGetValue(nameof(TreeMapLast), out var tex); + + if (tex != null) return tex; + tex = AssetHelper.FindAssetWithPath("tree_map_last.png", "Editor/Hierarchy/Textures"); + TextureCached[nameof(TreeMapLast)] = tex; + return tex; + } + } + + public static Texture2D TreeMapLevel + { + get + { + TextureCached.TryGetValue(nameof(TreeMapLevel), out var tex); + + if (tex != null) return tex; + tex = AssetHelper.FindAssetWithPath("tree_map_level.png", "Editor/Hierarchy/Textures"); + TextureCached[nameof(TreeMapLevel)] = tex; + return tex; + } + } + + public static Texture2D TreeMapLine + { + get + { + TextureCached.TryGetValue(nameof(TreeMapLine), out var tex); + + if (tex != null) return tex; + tex = AssetHelper.FindAssetWithPath("tree_map_line.png", "Editor/Hierarchy/Textures"); + TextureCached[nameof(TreeMapLine)] = tex; + return tex; + } + } + + public override void OnGUI(int instanceID, Rect selectionRect) + { + var gameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject; + if (gameObject == null) return; + + var settings = AlchemySettings.GetOrCreateSettings(); + if (settings.ShowTreeMap) + { + selectionRect.width = 14; + selectionRect.height = 16; + + int childCount = gameObject.transform.childCount; + int level = Mathf.RoundToInt(selectionRect.x / 14f); + var t = gameObject.transform; + Transform parent = null; + + for (int i = 0, j = level - 1; j >= 0; i++, j--) + { + selectionRect.x = 14 * j; + if (i == 0) + { + if (childCount == 0) + { + GUI.color = settings.TreeMapColor; + GUI.DrawTexture(selectionRect, TreeMapLine); + } + + t = gameObject.transform; + } + else if (i == 1) + { + GUI.color = settings.TreeMapColor; + if (parent == null) + { + if (t.GetSiblingIndex() == gameObject.scene.rootCount - 1) + { + GUI.DrawTexture(selectionRect, TreeMapLast); + } + else + { + GUI.DrawTexture(selectionRect, TreeMapCurrent); + } + } + else if (t.GetSiblingIndex() == parent.childCount - 1) + { + GUI.DrawTexture(selectionRect, TreeMapLast); + } + else + { + GUI.DrawTexture(selectionRect, TreeMapCurrent); + } + + t = parent; + } + else + { + if (parent == null) + { + if (t.GetSiblingIndex() != gameObject.scene.rootCount - 1) GUI.DrawTexture(selectionRect, TreeMapLevel); + } + else if (t.GetSiblingIndex() != parent.childCount - 1) GUI.DrawTexture(selectionRect, TreeMapLevel); + + t = parent; + } + + if (t != null) parent = t.parent; + else break; + } + + GUI.color = Color.white; + } + } + } +} \ No newline at end of file diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyTreeMapDrawer.cs.meta b/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyTreeMapDrawer.cs.meta new file mode 100644 index 0000000..ac8ceb4 --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/HierarchyTreeMapDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ced594b65fdd06438b3a7fb9a468cc6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures.meta b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures.meta new file mode 100644 index 0000000..0b40795 --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6456f2264a0eb3e4ab21dd7eeacaed6a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_current.png b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_current.png new file mode 100644 index 0000000..f6902bc Binary files /dev/null and b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_current.png differ diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_current.png.meta b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_current.png.meta new file mode 100644 index 0000000..a2c466b --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_current.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 6fcde88cb33bc664fbdbf06fcb9e61bf +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + 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: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iOS + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 50 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 50 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + 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: 3 + buildTarget: iPhone + maxTextureSize: 32 + 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: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_last.png b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_last.png new file mode 100644 index 0000000..f5b2d0e Binary files /dev/null and b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_last.png differ diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_last.png.meta b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_last.png.meta new file mode 100644 index 0000000..a31820f --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_last.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 0a6f5ce3bc75d6246bf08e03a36ff4a6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + 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: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iOS + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 50 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 50 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + 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: 3 + buildTarget: iPhone + maxTextureSize: 32 + 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: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_level.png b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_level.png new file mode 100644 index 0000000..cd2faea Binary files /dev/null and b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_level.png differ diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_level.png.meta b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_level.png.meta new file mode 100644 index 0000000..89157d0 --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_level.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 2506c02ada3af604e85cd968b47c3d62 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + 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: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iOS + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 50 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 50 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + 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: 3 + buildTarget: iPhone + maxTextureSize: 32 + 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: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_line.png b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_line.png new file mode 100644 index 0000000..72b042b Binary files /dev/null and b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_line.png differ diff --git a/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_line.png.meta b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_line.png.meta new file mode 100644 index 0000000..5d3389e --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Hierarchy/Textures/tree_map_line.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: dbde2afdf4cde684da439f40428c19c4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + 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: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iOS + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 50 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: 50 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + 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: 3 + buildTarget: iPhone + maxTextureSize: 32 + 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: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Alchemy/Assets/Alchemy/Editor/Internal/AssetHelper.cs b/Alchemy/Assets/Alchemy/Editor/Internal/AssetHelper.cs new file mode 100644 index 0000000..efc3d37 --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Internal/AssetHelper.cs @@ -0,0 +1,26 @@ +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace Alchemy.Editor +{ + internal static class AssetHelper + { + public static T FindAssetWithPath(string nameAsset, string relativePath, bool outsideScope = false) where T : Object + { + string path = outsideScope ? $"{relativePath}/{nameAsset}" : AssetInPackagePath(relativePath, nameAsset); + var t = AssetDatabase.LoadAssetAtPath(path, typeof(T)); + if (t == null) Debug.LogError($"Couldn't load the {nameof(T)} at path :{path}"); + return t as T; + } + + private static string AssetInPackagePath(string relativePath, string nameAsset) { return GetPathInCurrentEnvironent($"{relativePath}/{nameAsset}"); } + + private static string GetPathInCurrentEnvironent(string fullRelativePath) + { + var upmPath = $"Packages/com.annulusgames.alchemy/{fullRelativePath}"; + var normalPath = $"Assets/Alchemy/{fullRelativePath}"; + return !File.Exists(Path.GetFullPath(upmPath)) ? normalPath : upmPath; + } + } +} \ No newline at end of file diff --git a/Alchemy/Assets/Alchemy/Editor/Internal/AssetHelper.cs.meta b/Alchemy/Assets/Alchemy/Editor/Internal/AssetHelper.cs.meta new file mode 100644 index 0000000..55952c6 --- /dev/null +++ b/Alchemy/Assets/Alchemy/Editor/Internal/AssetHelper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dd030e11e64f4eedbd42c8bc0afd5ae1 +timeCreated: 1714886762 \ No newline at end of file diff --git a/Alchemy/ProjectSettings/AlchemySettings.json b/Alchemy/ProjectSettings/AlchemySettings.json index 4a12bca..d8c4c3e 100644 --- a/Alchemy/ProjectSettings/AlchemySettings.json +++ b/Alchemy/ProjectSettings/AlchemySettings.json @@ -1,5 +1,32 @@ -{ + "hierarchyObjectMode": 2, "showHierarchyToggles": true, - "showComponentIcons": true + "showComponentIcons": true, + "showTreeMap": false, + "treeMapColor": { + "r": 0.5299999713897705, + "g": 0.5299999713897705, + "b": 0.5299999713897705, + "a": 0.44999998807907107 + }, + "showSeparator": false, + "showRowShading": false, + "separatorColor": { + "r": 0.1899999976158142, + "g": 0.1899999976158142, + "b": 0.1899999976158142, + "a": 0.0 + }, + "evenRowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.07000000029802323 + }, + "oddRowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + } } \ No newline at end of file