From f173cb7acac4362bba18b1e6bc244ae00724255f Mon Sep 17 00:00:00 2001 From: Vladimir Pechorin <> Date: Mon, 13 May 2024 00:47:30 +0700 Subject: [PATCH] #168 Updated TileModifierPropertyDrawer to properly display RuleTile and other classes inherited from TileBase --- .../Editor/NavMeshModifierTilemapEditor.cs | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/NavMeshComponents/Editor/NavMeshModifierTilemapEditor.cs b/NavMeshComponents/Editor/NavMeshModifierTilemapEditor.cs index a1f09ba..578cb2e 100644 --- a/NavMeshComponents/Editor/NavMeshModifierTilemapEditor.cs +++ b/NavMeshComponents/Editor/NavMeshModifierTilemapEditor.cs @@ -89,6 +89,9 @@ private void AddUsedTiles(Tilemap tilemap, NavMeshModifierTilemap modifierTilema [CustomPropertyDrawer(typeof(NavMeshModifierTilemap.TileModifier))] class TileModifierPropertyDrawer : PropertyDrawer { + + private static Dictionary Previews; + private Rect ClaimAdvance(ref Rect position, float height) { Rect retVal = position; @@ -117,10 +120,28 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten EditorGUI.PropertyField(tileRect, tileProperty); TileBase tileBase = tileProperty.objectReferenceValue as TileBase; TileData tileData = new TileData(); - tileBase?.GetTileData(Vector3Int.zero, null, ref tileData); - if (tileData.sprite) + Texture textureToDraw; + try { - EditorGUI.DrawPreviewTexture(previewRect, tileData.sprite?.texture, null, ScaleMode.ScaleToFit, 0); + tileBase?.GetTileData(Vector3Int.zero, null, ref tileData); + textureToDraw = tileData.sprite?.texture; + } + catch + { + try + { + + textureToDraw = GetPreview(tileBase); + } + catch + { + textureToDraw = EditorGUIUtility.IconContent("console.erroricon.sml").image; + } + } + + if (textureToDraw) + { + EditorGUI.DrawPreviewTexture(previewRect, textureToDraw, null, ScaleMode.ScaleToFit, 0); } Rect toggleRect = ClaimAdvance(ref position, 20); @@ -138,6 +159,26 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten } } + static Texture2D GetPreview(Object objectToPreview) + { + int maxResolution = 128; + Previews ??= new(); + if (!Previews.TryGetValue(objectToPreview, out var preview) || preview == null) + { + var path = AssetDatabase.GetAssetPath(objectToPreview); + if (objectToPreview) + { + var editor = CreateEditor(objectToPreview); + preview = editor.RenderStaticPreview(path, null, maxResolution, maxResolution); + preview.Apply(); + DestroyImmediate(editor); + Previews[objectToPreview] = preview; + } + } + + return preview; + } + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { if (property.isExpanded)