using System; using System.Collections.Generic; using System.IO; using Rukhanka.Hybrid; using Rukhanka.Toolbox; using Unity.Collections; using Unity.Entities; using UnityEditor; using UnityEditor.Build; using UnityEditor.Compilation; using UnityEngine; using UnityEngine.UIElements; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// namespace Rukhanka.Editor { public class BlobInspector : EditorWindow { [SerializeField] private VisualTreeAsset menuAsset = default; [SerializeField] private VisualTreeAsset blobDBPaneAsset = default; [SerializeField] private VisualTreeAsset blobCachePaneAsset = default; [SerializeField] private VisualTreeAsset blobCacheEntryAsset = default; [SerializeField] private VisualTreeAsset listViewLabelAsset = default; [SerializeField] private VisualTreeAsset listViewInfoBtnAsset = default; VisualElement menuElem, blobCachePane, blobDBPane ; TwoPaneSplitView splitView; internal enum BlobType { AnimatorController, AnimationClip, RigInfo, SkinnedMeshInfo, AvatarMask, Total } internal class BlobAssetInfo where T: unmanaged { public BlobAssetReference blobAsset; public List refEntities; } class BlobAssetsSummary { public int sizeInBytes; public int totalCount; } List> allControllerBlobAssets = new (); List> allAnimationClipBlobAssets = new (); List> allRigBlobAssets = new (); List> allSkinnedMeshBlobAssets = new (); List> allAvatarMaskBlobAssets = new (); BlobAssetsSummary blobAssetsSummary; readonly string nameColumnName = "name"; readonly string hashColumnName = "hash"; readonly string referencesColumnName = "references"; readonly string sizeColumnName = "size"; readonly string bakingTimeColumnName = "bakingTime"; readonly string infoColumnName = "info"; internal static World currentWorld; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// [MenuItem("Window/Rukhanka Animation/Blob Inspector")] public static void ShowWindow() { var wnd = GetWindow(); wnd.minSize = new Vector2(1000, 400); wnd.titleContent = new GUIContent("Rukhanka.Animation Blob Inspector"); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void CreateGUI() { // Each editor window contains a root VisualElement object var root = rootVisualElement; splitView = new TwoPaneSplitView(0, 250, TwoPaneSplitViewOrientation.Horizontal); root.Add(splitView); menuElem = menuAsset.Instantiate(); menuElem.Query