├── .docs ├── EditMenu.png ├── HelpMenu.png ├── InspectedObjectReference.png ├── InspectorWindow-Extended.png ├── InspectorWindow-Footer.png ├── InspectorWindow-Minimized.png ├── InspectorWindow-QuickStats.png ├── InspectorWindow-Toolbar.png ├── InspectorWindow-ViewMode-IMGUI.png ├── InspectorWindow-ViewMode-InspectorElement.png ├── InspectorWindow-ViewMode-Preview.png ├── InspectorWindow-ViewMode-Static-Mesh.png ├── InspectorWindow-ViewMode-Static-Shader.png ├── InspectorWindow-ViewModes.png ├── InspectorWindow-WindowControls.png ├── InspectorWindow.png ├── ProjectSettings.png ├── Reference-Highlighted.png ├── Reference-Normal.png ├── Reference.png ├── TypeSelectionPopup.png ├── ViewMenu-Filters.png ├── ViewMenu-ShowPrefabReferences-Off.png ├── ViewMenu-ShowPrefabReferences-On.png ├── ViewMenu-ShowScripts-Off.png ├── ViewMenu-ShowScripts-On.png ├── ViewMenu.png ├── WindowSample.png └── ZoomControls.png ├── .editorconfig ├── .gitignore ├── CHANGELOG.md ├── CHANGELOG.md.meta ├── Editor.meta ├── Editor ├── Assembly.cs ├── Assembly.cs.meta ├── Assets.meta ├── Assets │ ├── Images.meta │ ├── Images │ │ ├── Icon-Corner.png │ │ ├── Icon-Corner.png.meta │ │ ├── Icon-SplitArrows.png │ │ ├── Icon-SplitArrows.png.meta │ │ ├── Info-icon.png │ │ ├── Info-icon.png.meta │ │ ├── TopLogo.png │ │ ├── TopLogo.png.meta │ │ ├── Window-Icons.png │ │ └── Window-Icons.png.meta │ ├── InspectorGraph.uss │ ├── InspectorGraph.uss.meta │ ├── InspectorWindow.uss │ └── InspectorWindow.uss.meta ├── GiantParticle.InspectorGraph.asmdef ├── GiantParticle.InspectorGraph.asmdef.meta ├── InspectorGraph.meta └── InspectorGraph │ ├── ApplicationContext.cs │ ├── ApplicationContext.cs.meta │ ├── CustomAttributes.meta │ ├── CustomAttributes │ ├── EditorDisplayNameAttribute.cs │ ├── EditorDisplayNameAttribute.cs.meta │ ├── InternalPriorityAttribute.cs │ └── InternalPriorityAttribute.cs.meta │ ├── Data.meta │ ├── Data │ ├── ContentViewRegistry.cs │ ├── ContentViewRegistry.cs.meta │ ├── Graph.meta │ ├── Graph │ │ ├── BaseGraphFactory.cs │ │ ├── BaseGraphFactory.cs.meta │ │ ├── Filters.meta │ │ ├── Filters │ │ │ ├── ITypeFilter.cs │ │ │ ├── ITypeFilter.cs.meta │ │ │ ├── TypeFilterByName.cs │ │ │ ├── TypeFilterByName.cs.meta │ │ │ ├── TypeFilterHandler.cs │ │ │ └── TypeFilterHandler.cs.meta │ │ ├── GraphController.cs │ │ ├── GraphController.cs.meta │ │ ├── IGraphController.cs │ │ ├── IGraphController.cs.meta │ │ ├── IGraphFactory.cs │ │ ├── IGraphFactory.cs.meta │ │ ├── SubTree.meta │ │ ├── SubTree │ │ │ ├── ObjectNodeProcessors.meta │ │ │ ├── ObjectNodeProcessors │ │ │ │ ├── AnimatorControllerObjectNodeProcessor.cs │ │ │ │ ├── AnimatorControllerObjectNodeProcessor.cs.meta │ │ │ │ ├── BaseObjectNodeProcessor.cs │ │ │ │ ├── BaseObjectNodeProcessor.cs.meta │ │ │ │ ├── GameObjectObjectNodeProcessor.cs │ │ │ │ ├── GameObjectObjectNodeProcessor.cs.meta │ │ │ │ ├── IObjectNodeProcessor.cs │ │ │ │ └── IObjectNodeProcessor.cs.meta │ │ │ ├── SerializedPropertyProcessors.meta │ │ │ └── SerializedPropertyProcessors │ │ │ │ ├── BaseSerializedPropertyProcessor.cs │ │ │ │ ├── BaseSerializedPropertyProcessor.cs.meta │ │ │ │ ├── ISerializedPropertyProcessor.cs │ │ │ │ ├── ISerializedPropertyProcessor.cs.meta │ │ │ │ ├── ObjectReferenceSerializedPropertyProcessor.cs │ │ │ │ └── ObjectReferenceSerializedPropertyProcessor.cs.meta │ │ ├── SubTreeGraphFactory.cs │ │ └── SubTreeGraphFactory.cs.meta │ ├── Nodes.meta │ ├── Nodes │ │ ├── IObjectNode.cs │ │ ├── IObjectNode.cs.meta │ │ ├── IObjectNodeFactory.cs │ │ ├── IObjectNodeFactory.cs.meta │ │ ├── IObjectReference.cs │ │ ├── IObjectReference.cs.meta │ │ ├── ObjectNode.cs │ │ ├── ObjectNode.cs.meta │ │ ├── ObjectNodeFactory.cs │ │ ├── ObjectNodeFactory.cs.meta │ │ ├── ObjectReference.cs │ │ ├── ObjectReference.cs.meta │ │ ├── ReferenceDirection.cs │ │ ├── ReferenceDirection.cs.meta │ │ ├── ReferenceType.cs │ │ └── ReferenceType.cs.meta │ ├── Stats.meta │ ├── Stats │ │ ├── ObjectNodeStats.cs │ │ ├── ObjectNodeStats.cs.meta │ │ ├── ReferenceByTypeStats.cs │ │ ├── ReferenceByTypeStats.cs.meta │ │ ├── ReferenceStats.cs │ │ └── ReferenceStats.cs.meta │ ├── WindowData.cs │ └── WindowData.cs.meta │ ├── InspectorGraph.cs │ ├── InspectorGraph.cs.meta │ ├── InspectorGraph.uxml │ ├── InspectorGraph.uxml.meta │ ├── InspectorGraphFooter.cs │ ├── InspectorGraphFooter.cs.meta │ ├── InspectorGraphFooter.uxml │ ├── InspectorGraphFooter.uxml.meta │ ├── InspectorGraphFooter_VisualTree.cs │ ├── InspectorGraphFooter_VisualTree.cs.meta │ ├── InspectorGraphSettingsProvider.cs │ ├── InspectorGraphSettingsProvider.cs.meta │ ├── InspectorGraphSettingsProvider.uxml │ ├── InspectorGraphSettingsProvider.uxml.meta │ ├── InspectorGraphToolbar.cs │ ├── InspectorGraphToolbar.cs.meta │ ├── InspectorGraphToolbar.uxml │ ├── InspectorGraphToolbar.uxml.meta │ ├── InspectorGraphToolbar_VisualTree.cs │ ├── InspectorGraphToolbar_VisualTree.cs.meta │ ├── InspectorGraph_VisualTree.cs │ ├── InspectorGraph_VisualTree.cs.meta │ ├── Manipulators.meta │ ├── Manipulators │ ├── BaseDragManipulator.cs │ ├── BaseDragManipulator.cs.meta │ ├── BaseHoverManipulator.cs │ ├── BaseHoverManipulator.cs.meta │ ├── BringToFrontManipulator.cs │ ├── BringToFrontManipulator.cs.meta │ ├── DragManipulator.cs │ ├── DragManipulator.cs.meta │ ├── HighlightManipulator.cs │ ├── HighlightManipulator.cs.meta │ ├── IPositionManipulator.cs │ ├── IPositionManipulator.cs.meta │ ├── IScalableManipulator.cs │ ├── IScalableManipulator.cs.meta │ ├── ResizeManipulator.cs │ └── ResizeManipulator.cs.meta │ ├── Notifications.meta │ ├── Notifications │ ├── INotificationController.cs │ ├── INotificationController.cs.meta │ ├── InspectorGraphNotification.cs │ ├── InspectorGraphNotification.cs.meta │ ├── InspectorGraphNotification.uxml │ ├── InspectorGraphNotification.uxml.meta │ ├── InspectorGraphNotification_VisualTree.cs │ ├── InspectorGraphNotification_VisualTree.cs.meta │ ├── NotificationController.cs │ ├── NotificationController.cs.meta │ ├── NotificationType.cs │ └── NotificationType.cs.meta │ ├── Operations.meta │ ├── Operations │ ├── IOperation.cs │ ├── IOperation.cs.meta │ ├── Operation.cs │ ├── Operation.cs.meta │ ├── OperationState.cs │ └── OperationState.cs.meta │ ├── Persistence.meta │ ├── Persistence │ ├── Connections.meta │ ├── Connections │ │ ├── ConnectionSettings.cs │ │ ├── ConnectionSettings.cs.meta │ │ ├── IConnectionSettings.cs │ │ ├── IConnectionSettings.cs.meta │ │ ├── IReferenceColorSettings.cs │ │ ├── IReferenceColorSettings.cs.meta │ │ ├── ReferenceColorSettings.cs │ │ └── ReferenceColorSettings.cs.meta │ ├── Filters.meta │ ├── Filters │ │ ├── FilterSettings.cs │ │ ├── FilterSettings.cs.meta │ │ ├── FilterTypeSetting.cs │ │ ├── FilterTypeSetting.cs.meta │ │ ├── IFilterSettings.cs │ │ ├── IFilterSettings.cs.meta │ │ ├── IFilterTypeSetting.cs │ │ └── IFilterTypeSetting.cs.meta │ ├── IInspectorGraphProjectSettings.cs │ ├── IInspectorGraphProjectSettings.cs.meta │ ├── IInspectorGraphUserPreferences.cs │ ├── IInspectorGraphUserPreferences.cs.meta │ ├── InspectorGraphProjectSettings.cs │ ├── InspectorGraphProjectSettings.cs.meta │ ├── InspectorGraphUserPreferences.cs │ ├── InspectorGraphUserPreferences.cs.meta │ ├── InspectorWindow.meta │ └── InspectorWindow │ │ ├── IInspectorWindowSettings.cs │ │ ├── IInspectorWindowSettings.cs.meta │ │ ├── IInspectorWindowSizeSettings.cs │ │ ├── IInspectorWindowSizeSettings.cs.meta │ │ ├── InspectorWindowSettings.cs │ │ ├── InspectorWindowSettings.cs.meta │ │ ├── InspectorWindowSizeSettings.cs │ │ └── InspectorWindowSizeSettings.cs.meta │ ├── Plugins.meta │ ├── Plugins │ ├── IConfigurablePreferences.cs │ ├── IConfigurablePreferences.cs.meta │ ├── IInspectorGraphPlugin.cs │ ├── IInspectorGraphPlugin.cs.meta │ ├── IInspectorGraphPluginView.cs │ ├── IInspectorGraphPluginView.cs.meta │ ├── IInspectorGraphToolbar.cs │ ├── IInspectorGraphToolbar.cs.meta │ ├── IInspectorGraphToolbarConfigurable.cs │ └── IInspectorGraphToolbarConfigurable.cs.meta │ ├── ReflectionHelper.cs │ ├── ReflectionHelper.cs.meta │ ├── UIToolkit.meta │ ├── UIToolkit │ ├── UIToolkitHelper.cs │ ├── UIToolkitHelper.cs.meta │ ├── VisualElementFieldAttribute.cs │ └── VisualElementFieldAttribute.cs.meta │ ├── Views.meta │ ├── Views │ ├── ConnectionData.cs │ ├── ConnectionData.cs.meta │ ├── ConnectionDrawer.cs │ ├── ConnectionDrawer.cs.meta │ ├── ConnectionLine.cs │ ├── ConnectionLine.cs.meta │ ├── ContentView.meta │ ├── ContentView │ │ ├── BaseWindowContent.cs │ │ ├── BaseWindowContent.cs.meta │ │ ├── ContentViewMode.cs │ │ ├── ContentViewMode.cs.meta │ │ ├── IMGUIPreviewWindowContent.cs │ │ ├── IMGUIPreviewWindowContent.cs.meta │ │ ├── IMGUIWindowContent.cs │ │ ├── IMGUIWindowContent.cs.meta │ │ ├── InspectorElementWindowContent.cs │ │ ├── InspectorElementWindowContent.cs.meta │ │ ├── StaticPreviewWindowContent.cs │ │ ├── StaticPreviewWindowContent.cs.meta │ │ ├── WindowContentFactory.cs │ │ └── WindowContentFactory.cs.meta │ ├── IConnectionDrawer.cs │ ├── IConnectionDrawer.cs.meta │ ├── InspectorElementObserver.cs │ ├── InspectorElementObserver.cs.meta │ ├── InspectorWindow.cs │ ├── InspectorWindow.cs.meta │ ├── InspectorWindow.uxml │ ├── InspectorWindow.uxml.meta │ ├── InspectorWindow_VisualTree.cs │ ├── InspectorWindow_VisualTree.cs.meta │ ├── PropertyDrawers.meta │ ├── PropertyDrawers │ │ ├── BasePropertyDrawer.cs │ │ ├── BasePropertyDrawer.cs.meta │ │ ├── ConnectionSettings.meta │ │ ├── ConnectionSettings │ │ │ ├── ConnectionSettingsPropertyDrawer.cs │ │ │ ├── ConnectionSettingsPropertyDrawer.cs.meta │ │ │ ├── ConnectionSettingsPropertyDrawer.uxml │ │ │ ├── ConnectionSettingsPropertyDrawer.uxml.meta │ │ │ ├── ReferenceColorSettingsPropertyDrawer.cs │ │ │ ├── ReferenceColorSettingsPropertyDrawer.cs.meta │ │ │ ├── ReferenceColorSettingsPropertyDrawer.uxml │ │ │ └── ReferenceColorSettingsPropertyDrawer.uxml.meta │ │ ├── FilterSettings.meta │ │ ├── FilterSettings │ │ │ ├── FilterSettingsPropertyDrawer.cs │ │ │ ├── FilterSettingsPropertyDrawer.cs.meta │ │ │ ├── FilterSettingsPropertyDrawer.uxml │ │ │ ├── FilterSettingsPropertyDrawer.uxml.meta │ │ │ ├── FilterTypeOptionsPopup.cs │ │ │ ├── FilterTypeOptionsPopup.cs.meta │ │ │ ├── FilterTypeOptionsPopup.uxml │ │ │ ├── FilterTypeOptionsPopup.uxml.meta │ │ │ ├── FilterTypeSettingsPropertyDrawer.cs │ │ │ ├── FilterTypeSettingsPropertyDrawer.cs.meta │ │ │ ├── FilterTypeSettingsPropertyDrawer.uxml │ │ │ └── FilterTypeSettingsPropertyDrawer.uxml.meta │ │ ├── InspectorWindowSettings.meta │ │ └── InspectorWindowSettings │ │ │ ├── InspectorWindowSettingsPropertyDrawer.cs │ │ │ ├── InspectorWindowSettingsPropertyDrawer.cs.meta │ │ │ ├── InspectorWindowSettingsPropertyDrawer.uxml │ │ │ ├── InspectorWindowSettingsPropertyDrawer.uxml.meta │ │ │ ├── InspectorWindowSizeSettingsPropertyDrawer.cs │ │ │ ├── InspectorWindowSizeSettingsPropertyDrawer.cs.meta │ │ │ ├── InspectorWindowSizeSettingsPropertyDrawer.uxml │ │ │ └── InspectorWindowSizeSettingsPropertyDrawer.uxml.meta │ ├── QuickStatsView.cs │ ├── QuickStatsView.cs.meta │ ├── ToolbarContent.meta │ ├── ToolbarContent │ │ ├── ViewModeMenu.cs │ │ └── ViewModeMenu.cs.meta │ ├── WindowOrganizers.meta │ ├── WindowOrganizers │ │ ├── BaseWindowOrganizer.cs │ │ ├── BaseWindowOrganizer.cs.meta │ │ ├── BottomUpWindowOrganizer.cs │ │ ├── BottomUpWindowOrganizer.cs.meta │ │ ├── IWindowOrganizer.cs │ │ ├── IWindowOrganizer.cs.meta │ │ ├── TopDownWindowOrganizer.cs │ │ ├── TopDownWindowOrganizer.cs.meta │ │ ├── WindowOrganizerFactory.cs │ │ ├── WindowOrganizerFactory.cs.meta │ │ ├── WindowOrganizerType.cs │ │ └── WindowOrganizerType.cs.meta │ ├── WindowStateController.cs │ └── WindowStateController.cs.meta │ ├── VisualElementExtensions.cs │ └── VisualElementExtensions.cs.meta ├── LICENSE ├── LICENSE.meta ├── README.md ├── README.md.meta ├── package.json └── package.json.meta /.docs/EditMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/EditMenu.png -------------------------------------------------------------------------------- /.docs/HelpMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/HelpMenu.png -------------------------------------------------------------------------------- /.docs/InspectedObjectReference.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectedObjectReference.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-Extended.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-Extended.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-Footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-Footer.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-Minimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-Minimized.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-QuickStats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-QuickStats.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-Toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-Toolbar.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-ViewMode-IMGUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-ViewMode-IMGUI.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-ViewMode-InspectorElement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-ViewMode-InspectorElement.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-ViewMode-Preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-ViewMode-Preview.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-ViewMode-Static-Mesh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-ViewMode-Static-Mesh.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-ViewMode-Static-Shader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-ViewMode-Static-Shader.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-ViewModes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-ViewModes.png -------------------------------------------------------------------------------- /.docs/InspectorWindow-WindowControls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow-WindowControls.png -------------------------------------------------------------------------------- /.docs/InspectorWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/InspectorWindow.png -------------------------------------------------------------------------------- /.docs/ProjectSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/ProjectSettings.png -------------------------------------------------------------------------------- /.docs/Reference-Highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/Reference-Highlighted.png -------------------------------------------------------------------------------- /.docs/Reference-Normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/Reference-Normal.png -------------------------------------------------------------------------------- /.docs/Reference.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/Reference.png -------------------------------------------------------------------------------- /.docs/TypeSelectionPopup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/TypeSelectionPopup.png -------------------------------------------------------------------------------- /.docs/ViewMenu-Filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/ViewMenu-Filters.png -------------------------------------------------------------------------------- /.docs/ViewMenu-ShowPrefabReferences-Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/ViewMenu-ShowPrefabReferences-Off.png -------------------------------------------------------------------------------- /.docs/ViewMenu-ShowPrefabReferences-On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/ViewMenu-ShowPrefabReferences-On.png -------------------------------------------------------------------------------- /.docs/ViewMenu-ShowScripts-Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/ViewMenu-ShowScripts-Off.png -------------------------------------------------------------------------------- /.docs/ViewMenu-ShowScripts-On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/ViewMenu-ShowScripts-On.png -------------------------------------------------------------------------------- /.docs/ViewMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/ViewMenu.png -------------------------------------------------------------------------------- /.docs/WindowSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/WindowSample.png -------------------------------------------------------------------------------- /.docs/ZoomControls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/.docs/ZoomControls.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /Editor/Pro 3 | /Editor/Pro.meta 4 | -------------------------------------------------------------------------------- /CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9638a1f5b04c54e65bc9bd4c3d55707d 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2d2f2fbc2208d409e87aac433734ef3e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Assembly.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Runtime.CompilerServices; 7 | 8 | [assembly: InternalsVisibleTo("GiantParticle.InspectorGraphPro")] 9 | -------------------------------------------------------------------------------- /Editor/Assembly.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c10de47fd9b04d46a387cc373d846d0e 3 | timeCreated: 1680310395 -------------------------------------------------------------------------------- /Editor/Assets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 801eb5cee20f84c46bb57d07f16a48ed 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Assets/Images.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0f8fc99737e87418ea430c320cf9c6ae 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Assets/Images/Icon-Corner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/Editor/Assets/Images/Icon-Corner.png -------------------------------------------------------------------------------- /Editor/Assets/Images/Icon-Corner.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c25f12f1fa3ea40bca569129a949ce71 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 0 120 | pSDShowRemoveMatteOption: 0 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Editor/Assets/Images/Icon-SplitArrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/Editor/Assets/Images/Icon-SplitArrows.png -------------------------------------------------------------------------------- /Editor/Assets/Images/Icon-SplitArrows.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e4089d1719acb45c6805050fbc8d2d72 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 0 120 | pSDShowRemoveMatteOption: 0 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Editor/Assets/Images/Info-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/Editor/Assets/Images/Info-icon.png -------------------------------------------------------------------------------- /Editor/Assets/Images/Info-icon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f098668302e0e4625a9b51f6214cb191 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 0 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: iPhone 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: [] 119 | outline: [] 120 | physicsShape: [] 121 | bones: [] 122 | spriteID: 5e97eb03825dee720800000000000000 123 | internalID: 0 124 | vertices: [] 125 | indices: 126 | edges: [] 127 | weights: [] 128 | secondaryTextures: [] 129 | nameFileIdTable: {} 130 | spritePackingTag: 131 | pSDRemoveMatte: 0 132 | pSDShowRemoveMatteOption: 0 133 | userData: 134 | assetBundleName: 135 | assetBundleVariant: 136 | -------------------------------------------------------------------------------- /Editor/Assets/Images/TopLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/Editor/Assets/Images/TopLogo.png -------------------------------------------------------------------------------- /Editor/Assets/Images/TopLogo.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dd404e388f0394db991152cccf9cb322 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 0 120 | pSDShowRemoveMatteOption: 0 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Editor/Assets/Images/Window-Icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/giantparticlegames/InspectorGraph/ae33fed7a3c1e10cb99813fcc2df1f380e516034/Editor/Assets/Images/Window-Icons.png -------------------------------------------------------------------------------- /Editor/Assets/InspectorGraph.uss: -------------------------------------------------------------------------------- 1 | Toolbar Slider Label { 2 | min-width: 80px; 3 | } 4 | 5 | Toolbar Slider .unity-base-slider__input { 6 | min-width: 120px; 7 | } 8 | 9 | ContentZoomController ToolbarButton { 10 | -unity-text-align: middle-left; 11 | } 12 | 13 | Toolbar DropdownField .unity-popup-field__label { 14 | max-width: 100px; 15 | min-width: 100px; 16 | width: 100px; 17 | } 18 | 19 | Toolbar ObjectField .unity-base-field__label { 20 | max-width: 90px; 21 | min-width: 90px; 22 | width: 90px; 23 | } 24 | 25 | Toolbar ObjectField .unity-base-field__input { 26 | min-width: 150px; 27 | } -------------------------------------------------------------------------------- /Editor/Assets/InspectorGraph.uss.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 112b7f4032ad6422e97b4a8906e0136b 3 | ScriptedImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 2 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} 11 | disableValidation: 0 12 | -------------------------------------------------------------------------------- /Editor/Assets/InspectorWindow.uss: -------------------------------------------------------------------------------- 1 | .hideObjectSelector .unity-object-field__selector { 2 | display: none; 3 | } 4 | 5 | #_footer Label { 6 | font-size: 10px; 7 | -unity-text-align: middle-left; 8 | } 9 | 10 | #_footer Label:hover { 11 | background-color: rgb(44, 123, 192); 12 | } 13 | 14 | #_header ToolbarButton { 15 | background-image: url('project://database/Packages/com.giantparticle.inspector_graph/Editor/Assets/Images/Window-Icons.png?fileID=1361352028&guid=44f5a33f9efbf42178eed600ebc9176e&type=3#Window-Icons_Inactive'); 16 | } 17 | 18 | #_header:hover #_minimizeButton { 19 | background-image: url('project://database/Packages/com.giantparticle.inspector_graph/Editor/Assets/Images/Window-Icons.png?fileID=-136885581&guid=44f5a33f9efbf42178eed600ebc9176e&type=3#Window-Icons_Minimize_Normal'); 20 | } 21 | 22 | #_windowButtons:hover #_minimizeButton { 23 | background-image: url('project://database/Packages/com.giantparticle.inspector_graph/Editor/Assets/Images/Window-Icons.png?fileID=370450959&guid=44f5a33f9efbf42178eed600ebc9176e&type=3#Window-Icons_Minimize_Active'); 24 | } 25 | 26 | #_header:hover #_maximizeButton { 27 | background-image: url('project://database/Packages/com.giantparticle.inspector_graph/Editor/Assets/Images/Window-Icons.png?fileID=1265316110&guid=44f5a33f9efbf42178eed600ebc9176e&type=3#Window-Icons_Maximize_Normal'); 28 | } 29 | 30 | #_windowButtons:hover #_maximizeButton { 31 | background-image: url('project://database/Packages/com.giantparticle.inspector_graph/Editor/Assets/Images/Window-Icons.png?fileID=-509862331&guid=44f5a33f9efbf42178eed600ebc9176e&type=3#Window-Icons_Maximize_Active'); 32 | } 33 | 34 | .StaticPreview { 35 | justify-content: center; 36 | align-items: center; 37 | } 38 | 39 | .Preview { 40 | height: 100%; 41 | min-height: 128px; 42 | } 43 | 44 | .unity-imgui-container { 45 | height: 100%; 46 | } 47 | 48 | #_highlight { 49 | background-color: rgba(0, 0, 0, 0); 50 | } 51 | 52 | #_highlight:hover { 53 | background-color: rgb(44, 123, 192); 54 | } 55 | 56 | #_highlight VisualElement { 57 | -unity-background-image-tint-color: rgba(255, 255, 255, 0.5); 58 | } 59 | 60 | #_highlight.active VisualElement { 61 | -unity-background-image-tint-color: rgb(255, 255, 255); 62 | } 63 | -------------------------------------------------------------------------------- /Editor/Assets/InspectorWindow.uss.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80eefb49c4b344289aa3c3bf21da5662 3 | ScriptedImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 2 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} 11 | disableValidation: 0 12 | -------------------------------------------------------------------------------- /Editor/GiantParticle.InspectorGraph.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GiantParticle.InspectorGraph", 3 | "rootNamespace": "GiantParticle.InspectorGraph", 4 | "references": [ 5 | "UnityEditor.UI" 6 | ], 7 | "includePlatforms": [ 8 | "Editor" 9 | ], 10 | "excludePlatforms": [], 11 | "allowUnsafeCode": false, 12 | "overrideReferences": false, 13 | "precompiledReferences": [], 14 | "autoReferenced": true, 15 | "defineConstraints": [], 16 | "versionDefines": [], 17 | "noEngineReferences": false 18 | } -------------------------------------------------------------------------------- /Editor/GiantParticle.InspectorGraph.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9a19b5d7b864c437c8ae523330a3a720 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Editor/InspectorGraph.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e0ca6929d8d0466599691e9f0fe521ca 3 | timeCreated: 1670458675 -------------------------------------------------------------------------------- /Editor/InspectorGraph/ApplicationContext.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2022 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | using System.Collections.Generic; 8 | 9 | namespace GiantParticle.InspectorGraph 10 | { 11 | internal interface IApplicationContext 12 | { 13 | bool Contains() where T : class; 14 | T Get() where T : class; 15 | void Add(object instance) where T : class; 16 | void Remove() where T : class; 17 | } 18 | 19 | internal class ApplicationContext : IApplicationContext 20 | { 21 | private Dictionary _objectsByType = new(); 22 | 23 | public bool Contains() where T : class 24 | { 25 | return _objectsByType.ContainsKey(typeof(T)); 26 | } 27 | 28 | public T Get() 29 | where T : class 30 | { 31 | Type targetType = typeof(T); 32 | if (!_objectsByType.ContainsKey(targetType)) return null; 33 | 34 | return _objectsByType[targetType] as T; 35 | } 36 | 37 | public void Add(object instance) 38 | where T : class 39 | { 40 | Type targetType = typeof(T); 41 | _objectsByType.Add(targetType, instance); 42 | } 43 | 44 | public void Remove() 45 | where T : class 46 | { 47 | Type targetType = typeof(T); 48 | if (_objectsByType.ContainsKey(targetType)) 49 | _objectsByType.Remove(targetType); 50 | } 51 | } 52 | 53 | internal static class GlobalApplicationContext 54 | { 55 | private static IApplicationContext _instance; 56 | 57 | public static bool IsInstantiated 58 | { 59 | get => _instance != null; 60 | } 61 | 62 | public static IApplicationContext Instance 63 | { 64 | get => _instance; 65 | } 66 | 67 | public static void Instantiate() 68 | { 69 | if (_instance != null) return; 70 | _instance = new ApplicationContext(); 71 | } 72 | 73 | public static void Dispose() 74 | { 75 | _instance = null; 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/ApplicationContext.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a7cf1cd0eb754752b45948ca46d188ea 3 | timeCreated: 1670990666 -------------------------------------------------------------------------------- /Editor/InspectorGraph/CustomAttributes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 62146e68eced4b8a9dbe9fe3c5d99492 3 | timeCreated: 1693100285 -------------------------------------------------------------------------------- /Editor/InspectorGraph/CustomAttributes/EditorDisplayNameAttribute.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | 8 | namespace GiantParticle.InspectorGraph.CustomAttributes 9 | { 10 | public class EditorDisplayNameAttribute : Attribute 11 | { 12 | public string DisplayName { get; } 13 | 14 | public EditorDisplayNameAttribute(string name) 15 | { 16 | DisplayName = name; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/CustomAttributes/EditorDisplayNameAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ccd612e21da04f6e8f0a97171045fb6d 3 | timeCreated: 1693100326 -------------------------------------------------------------------------------- /Editor/InspectorGraph/CustomAttributes/InternalPriorityAttribute.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | 8 | namespace GiantParticle.InspectorGraph.CustomAttributes 9 | { 10 | public class InternalPriorityAttribute : Attribute 11 | { 12 | public int Priority { get; } 13 | 14 | public InternalPriorityAttribute(int priority) 15 | { 16 | Priority = priority; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/CustomAttributes/InternalPriorityAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 39c403e9f25b4126afb927b11e17a1e7 3 | timeCreated: 1693100475 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3efd0c08ba574d9caedf9a3425821646 3 | timeCreated: 1670551944 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/ContentViewRegistry.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4002d5aebe4c49d48969ae6b50ae74f5 3 | timeCreated: 1670984360 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 359292c4865b4c2eab8aa68dfe73509d 3 | timeCreated: 1692493947 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/BaseGraphFactory.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using GiantParticle.InspectorGraph.Data.Graph.Filters; 7 | using GiantParticle.InspectorGraph.Data.Nodes; 8 | using GiantParticle.InspectorGraph.Operations; 9 | using UnityEditor; 10 | using Object = UnityEngine.Object; 11 | 12 | namespace GiantParticle.InspectorGraph.Data.Graph 13 | { 14 | internal abstract class BaseGraphFactory : IGraphFactory 15 | { 16 | public IObjectNode CurrentGraph { get; protected set; } 17 | public abstract ReferenceDirection GraphDirection { get; } 18 | 19 | public void ClearGraph() 20 | { 21 | CurrentGraph = null; 22 | } 23 | 24 | protected ITypeFilterHandler TypeFilter => GlobalApplicationContext.Instance.Get(); 25 | public abstract IOperation CreateGraphFromObject(Object rootObject); 26 | 27 | protected string GetAssetPath(Object rootObject) 28 | { 29 | string targetPath = AssetDatabase.GetAssetPath(rootObject); 30 | if (!string.IsNullOrEmpty(targetPath)) return targetPath; 31 | 32 | targetPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(rootObject); 33 | if (!string.IsNullOrEmpty(targetPath)) return targetPath; 34 | 35 | return null; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/BaseGraphFactory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 49dd952ac8fa4781ac247bbfff7678e7 3 | timeCreated: 1692504934 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/Filters.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f936d403045b403b8daced6739e3ddc0 3 | timeCreated: 1677370269 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/Filters/ITypeFilter.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | 8 | namespace GiantParticle.InspectorGraph.Data.Graph.Filters 9 | { 10 | internal interface ITypeFilter 11 | { 12 | /// 13 | /// Indicate the target type 14 | /// 15 | Type TargetType { get; } 16 | 17 | /// 18 | /// Indicate if an object of type should be expanded in the hierarchy 19 | /// 20 | bool ShouldExpandType { get; set; } 21 | 22 | /// 23 | /// Indicate if an object of type should show in the hierarchy 24 | /// 25 | bool ShouldShowType { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/Filters/ITypeFilter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e4bb73b25314afcad18068f3e27f300 3 | timeCreated: 1677370280 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/Filters/TypeFilterByName.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | using GiantParticle.InspectorGraph.Persistence; 8 | 9 | namespace GiantParticle.InspectorGraph.Data.Graph.Filters 10 | { 11 | internal class TypeFilterByName : ITypeFilter 12 | { 13 | public Type TargetType { get; } 14 | 15 | public bool ShouldExpandType { get; set; } 16 | 17 | public bool ShouldShowType { get; set; } 18 | 19 | public TypeFilterByName(FilterTypeSetting filterTypeSettings) 20 | { 21 | TargetType = ReflectionHelper.GetTypeByName(filterTypeSettings.FullyQualifiedName); 22 | ShouldShowType = filterTypeSettings.ShowType; 23 | ShouldExpandType = filterTypeSettings.ExpandType; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/Filters/TypeFilterByName.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e94073c6af74c42885e32ba48b49f24 3 | timeCreated: 1677370834 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/Filters/TypeFilterHandler.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | using System.Collections.Generic; 8 | using GiantParticle.InspectorGraph.Persistence; 9 | 10 | namespace GiantParticle.InspectorGraph.Data.Graph.Filters 11 | { 12 | internal interface ITypeFilterHandler 13 | { 14 | bool EnableFilters { get; set; } 15 | IReadOnlyCollection Filters { get; } 16 | bool ShouldExpandObject(object objectInstance); 17 | bool ShouldShowObject(object objectInstance); 18 | } 19 | 20 | internal class TypeFilterHandler : ITypeFilterHandler 21 | { 22 | private readonly Dictionary _filters = new(); 23 | 24 | public bool EnableFilters { get; set; } 25 | public IReadOnlyCollection Filters => _filters.Values; 26 | 27 | public TypeFilterHandler(IFilterSettings settings) 28 | { 29 | EnableFilters = settings.EnableFilters; 30 | if (settings.TypeFilters == null || settings.TypeFilters.Count <= 0) 31 | return; 32 | for (int i = 0; i < settings.TypeFilters.Count; ++i) 33 | { 34 | var filter = new TypeFilterByName(settings.TypeFilters[i]); 35 | if (filter.TargetType == null) continue; 36 | 37 | AssignFilter(filter); 38 | } 39 | } 40 | 41 | private void AssignFilter(ITypeFilter filter) 42 | { 43 | // Assign filter or override existing 44 | if (!_filters.ContainsKey(filter.TargetType)) 45 | { 46 | _filters.Add(filter.TargetType, filter); 47 | return; 48 | } 49 | 50 | _filters[filter.TargetType] = filter; 51 | } 52 | 53 | public bool ShouldExpandObject(object objectInstance) 54 | { 55 | if (!EnableFilters) return true; 56 | 57 | foreach (ITypeFilter filter in _filters.Values) 58 | { 59 | if (!filter.TargetType.IsInstanceOfType(objectInstance)) 60 | continue; 61 | return filter.ShouldExpandType; 62 | } 63 | 64 | return true; 65 | } 66 | 67 | public bool ShouldShowObject(object objectInstance) 68 | { 69 | if (!EnableFilters) return true; 70 | 71 | foreach (ITypeFilter filter in _filters.Values) 72 | { 73 | if (!filter.TargetType.IsInstanceOfType(objectInstance)) 74 | continue; 75 | return filter.ShouldShowType; 76 | } 77 | 78 | return true; 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/Filters/TypeFilterHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a15955b8c6ea4f3f962e619029e2e365 3 | timeCreated: 1677371037 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/GraphController.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | using GiantParticle.InspectorGraph.Data.Graph; 8 | using GiantParticle.InspectorGraph.Data.Nodes; 9 | using GiantParticle.InspectorGraph.Persistence; 10 | 11 | namespace GiantParticle.InspectorGraph.Editor.InspectorGraph.Data.Graph 12 | { 13 | internal class GraphController : IGraphController 14 | { 15 | public event Action SelectedFactoryChanged; 16 | public IGraphFactory ActiveFactory => _currentFactory; 17 | public IGraphFactory[] AvailableFactories { get; } 18 | 19 | public IObjectNode ActiveGraph => _currentFactory.CurrentGraph; 20 | 21 | private IGraphFactory _currentFactory; 22 | 23 | public GraphController() 24 | { 25 | AvailableFactories = ReflectionHelper.InstantiateAllImplementations(); 26 | Array.Sort(AvailableFactories, ReflectionHelper.CompareByPriority); 27 | var preferences = GlobalApplicationContext.Instance.Get(); 28 | 29 | if (SelectFactory(preferences.SelectedGraphFactoryIndex)) return; 30 | SelectFactory(0); 31 | } 32 | 33 | public void ClearActiveGraph() => _currentFactory.ClearGraph(); 34 | 35 | public bool SelectFactory(int index) 36 | { 37 | if (index < 0 || AvailableFactories.Length <= index) return false; 38 | 39 | _currentFactory = AvailableFactories[index]; 40 | var preferences = GlobalApplicationContext.Instance.Get(); 41 | preferences.SelectedGraphFactoryIndex = index; 42 | preferences.Save(); 43 | 44 | SelectedFactoryChanged?.Invoke(this); 45 | return true; 46 | } 47 | 48 | public bool SelectFactory(IGraphFactory factory) 49 | { 50 | for (int i = 0; i < AvailableFactories.Length; ++i) 51 | { 52 | if (AvailableFactories[i] != factory) continue; 53 | return SelectFactory(i); 54 | } 55 | 56 | return false; 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/GraphController.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ee7c12ddf8f94307a113d166caf3fbab 3 | timeCreated: 1693101593 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/IGraphController.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | using GiantParticle.InspectorGraph.Data.Graph; 8 | using GiantParticle.InspectorGraph.Data.Nodes; 9 | 10 | namespace GiantParticle.InspectorGraph.Editor.InspectorGraph.Data.Graph 11 | { 12 | internal interface IGraphController 13 | { 14 | event Action SelectedFactoryChanged; 15 | IGraphFactory ActiveFactory { get; } 16 | 17 | IGraphFactory[] AvailableFactories { get; } 18 | 19 | IObjectNode ActiveGraph { get; } 20 | 21 | void ClearActiveGraph(); 22 | 23 | bool SelectFactory(int index); 24 | bool SelectFactory(IGraphFactory factory); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/IGraphController.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d6f18e6cb95e44dda896ce67dff5af47 3 | timeCreated: 1693101600 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/IGraphFactory.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using GiantParticle.InspectorGraph.Data.Nodes; 7 | using GiantParticle.InspectorGraph.Operations; 8 | using Object = UnityEngine.Object; 9 | 10 | namespace GiantParticle.InspectorGraph.Data.Graph 11 | { 12 | internal interface IGraphFactory 13 | { 14 | IObjectNode CurrentGraph { get; } 15 | ReferenceDirection GraphDirection { get; } 16 | void ClearGraph(); 17 | IOperation CreateGraphFromObject(Object rootObject); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/IGraphFactory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 174d2f2472fd493f9bf5cbc4dda30e47 3 | timeCreated: 1692493955 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2d2f1174e38e40d88389743542c2da9b 3 | timeCreated: 1692495733 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/ObjectNodeProcessors.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d37cc7256ad74b80a1380b1440be3e5e 3 | timeCreated: 1680474494 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/ObjectNodeProcessors/AnimatorControllerObjectNodeProcessor.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | using System.Collections.Generic; 8 | using GiantParticle.InspectorGraph.Data.Nodes; 9 | using UnityEditor; 10 | using UnityEditor.Animations; 11 | using Object = UnityEngine.Object; 12 | 13 | namespace GiantParticle.InspectorGraph.Data.Graph.SubTree.ObjectNodeProcessors 14 | { 15 | /// 16 | /// The AnimatorController structure is similar to a GameObject in the sense that it contains references to objects 17 | /// that are declared inside the same file, hence, we need to extract and scan all those objects to properly detect 18 | /// references to other files like AnimationClips. 19 | /// One main difference with other objects is that its references are all hidden. 20 | /// 21 | internal class AnimatorControllerObjectNodeProcessor : BaseObjectNodeProcessor 22 | { 23 | public override Type TargetType => typeof(AnimatorController); 24 | 25 | public override void ProcessNode(ObjectNode node) 26 | { 27 | SerializedObject serializedObject = node.WindowData.SerializedObject; 28 | 29 | Queue queue = new Queue(); 30 | HashSet internalReferences = CreateInternalReferenceSet(serializedObject); 31 | foreach (Object internalObject in internalReferences) 32 | queue.Enqueue(new SerializedObject(internalObject)); 33 | 34 | // Scan all internal objects 35 | while (queue.Count > 0) 36 | { 37 | ProcessAllSerializedProperties( 38 | parentNode: node, 39 | serializedObject: queue.Dequeue(), 40 | excludeReferences: internalReferences); 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/ObjectNodeProcessors/AnimatorControllerObjectNodeProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 23b4a7fff83b4e4db3bc1dae223ccd30 3 | timeCreated: 1680481058 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/ObjectNodeProcessors/BaseObjectNodeProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ab7485db42074ca785f6d5f7f5fb103e 3 | timeCreated: 1680475232 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/ObjectNodeProcessors/GameObjectObjectNodeProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3efeaef7b6de47388158eabb21aa2826 3 | timeCreated: 1680476271 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/ObjectNodeProcessors/IObjectNodeProcessor.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | using System.Collections.Generic; 8 | using GiantParticle.InspectorGraph.Data.Graph.SubTree.SerializedPropertyProcessors; 9 | using GiantParticle.InspectorGraph.Data.Nodes; 10 | 11 | namespace GiantParticle.InspectorGraph.Data.Graph.SubTree.ObjectNodeProcessors 12 | { 13 | internal interface IObjectNodeProcessor 14 | { 15 | Type TargetType { get; } 16 | void SetPropertyProcessors(IReadOnlyList processors); 17 | void ProcessNode(ObjectNode node); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/ObjectNodeProcessors/IObjectNodeProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a6be592e8fd148a98ceca23fe667a9dc 3 | timeCreated: 1680474588 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/SerializedPropertyProcessors.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5ab4367610414c0a9e5488ce6d15f7d0 3 | timeCreated: 1678077642 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/SerializedPropertyProcessors/BaseSerializedPropertyProcessor.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Collections.Generic; 7 | using GiantParticle.InspectorGraph.Data.Nodes; 8 | using GiantParticle.InspectorGraph.Data.Graph.Filters; 9 | using UnityEditor; 10 | using UnityEngine; 11 | 12 | namespace GiantParticle.InspectorGraph.Data.Graph.SubTree.SerializedPropertyProcessors 13 | { 14 | internal abstract class BaseSerializedPropertyProcessor : ISerializedPropertyProcessor 15 | { 16 | public Queue NodeQueue { get; set; } 17 | 18 | protected ITypeFilterHandler FilterHandler => GlobalApplicationContext.Instance.Get(); 19 | 20 | protected IObjectNodeFactory NodeFactory => GlobalApplicationContext.Instance.Get(); 21 | 22 | public abstract bool ProcessSerializedProperty(SerializedProperty property, ObjectNode parentNode, 23 | ICollection excludeSet); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/SerializedPropertyProcessors/BaseSerializedPropertyProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9a99de60b65e4b0eb6331de4abfa08a0 3 | timeCreated: 1678078042 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/SerializedPropertyProcessors/ISerializedPropertyProcessor.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Collections.Generic; 7 | using GiantParticle.InspectorGraph.Data.Nodes; 8 | using UnityEditor; 9 | using UnityEngine; 10 | 11 | namespace GiantParticle.InspectorGraph.Data.Graph.SubTree.SerializedPropertyProcessors 12 | { 13 | internal interface ISerializedPropertyProcessor 14 | { 15 | Queue NodeQueue { get; set; } 16 | 17 | bool ProcessSerializedProperty(SerializedProperty property, ObjectNode parentNode, 18 | ICollection excludeSet); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/SerializedPropertyProcessors/ISerializedPropertyProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bbc65fb8540843de89123cb11a93b5b2 3 | timeCreated: 1678077677 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/SerializedPropertyProcessors/ObjectReferenceSerializedPropertyProcessor.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Collections.Generic; 7 | using GiantParticle.InspectorGraph.CustomAttributes; 8 | using GiantParticle.InspectorGraph.Data.Nodes; 9 | using UnityEditor; 10 | using UnityEngine; 11 | 12 | namespace GiantParticle.InspectorGraph.Data.Graph.SubTree.SerializedPropertyProcessors 13 | { 14 | [InternalPriority(0)] 15 | internal class ObjectReferenceSerializedPropertyProcessor : BaseSerializedPropertyProcessor 16 | { 17 | public override bool ProcessSerializedProperty(SerializedProperty property, ObjectNode parentNode, 18 | ICollection excludeSet) 19 | { 20 | if (property.propertyType != SerializedPropertyType.ObjectReference) 21 | return false; 22 | 23 | // From this point onwards, the property declared processed 24 | Object reference = property.objectReferenceValue; 25 | if (reference == null) 26 | return true; 27 | if (!FilterHandler.ShouldShowObject(reference)) 28 | return true; 29 | if (excludeSet != null && excludeSet.Contains(reference)) 30 | return true; 31 | 32 | // Translate component reference to Prefab 33 | if (reference is Component) 34 | { 35 | string assetPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(reference); 36 | if (!string.IsNullOrEmpty(assetPath)) 37 | reference = AssetDatabase.LoadAssetAtPath(assetPath); 38 | } 39 | 40 | ObjectNode childNode = NodeFactory.CreateNode(reference); 41 | ObjectNode.CreateReference( 42 | sourceObject: parentNode, 43 | targetObject: childNode, 44 | referenceType: ReferenceType.Direct); 45 | 46 | // Expand if indicated 47 | if (!FilterHandler.ShouldExpandObject(reference)) 48 | return true; 49 | NodeQueue.Enqueue(childNode); 50 | return true; 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTree/SerializedPropertyProcessors/ObjectReferenceSerializedPropertyProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 073cc3987c634e1fbc0117988e50c7e7 3 | timeCreated: 1678077831 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Graph/SubTreeGraphFactory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8813bca2209f4227a245c0c4a58118f8 3 | timeCreated: 1670975462 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1ede1fdbd92e4cada48bc2db150e7262 3 | timeCreated: 1670974921 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/IObjectNode.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Collections.Generic; 7 | using UnityEngine; 8 | 9 | namespace GiantParticle.InspectorGraph.Data.Nodes 10 | { 11 | internal interface IObjectNode 12 | { 13 | Object Object { get; } 14 | IWindowData WindowData { get; } 15 | IReadOnlyList References { get; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/IObjectNode.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 96cb15aeace047eabad0a897c1c8add5 3 | timeCreated: 1693538224 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/IObjectNodeFactory.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using UnityEngine; 7 | 8 | namespace GiantParticle.InspectorGraph.Data.Nodes 9 | { 10 | internal interface IObjectNodeFactory 11 | { 12 | void ClearRegistry(); 13 | ObjectNode CreateNode(Object obj, bool skipPath = false); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/IObjectNodeFactory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0b1d60bbe2bc47358a54fe29488cf823 3 | timeCreated: 1693543952 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/IObjectReference.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | namespace GiantParticle.InspectorGraph.Data.Nodes 7 | { 8 | internal interface IObjectReference 9 | { 10 | ReferenceDirection Direction { get; } 11 | ReferenceType RefType { get; } 12 | IObjectNode TargetNode { get; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/IObjectReference.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3dc88101843849a59dfd6b4ddce7e1a4 3 | timeCreated: 1693538380 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ObjectNode.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2022 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Collections.Generic; 7 | using UnityEngine; 8 | 9 | namespace GiantParticle.InspectorGraph.Data.Nodes 10 | { 11 | internal class ObjectNode : IObjectNode 12 | { 13 | public Object Object { get; } 14 | public IWindowData WindowData { get; } 15 | 16 | public IReadOnlyList References => _references; 17 | 18 | private List _references = new(); 19 | 20 | public ObjectNode(Object target) 21 | { 22 | Object = target; 23 | WindowData = new WindowData(target); 24 | } 25 | 26 | public static void CreateReference( 27 | ObjectNode sourceObject, 28 | ObjectNode targetObject, 29 | ReferenceType referenceType) 30 | { 31 | // Reference To 32 | var referenceTo = new ObjectReference( 33 | targetNode: targetObject, 34 | referenceType: referenceType, 35 | direction: ReferenceDirection.ReferenceTo); 36 | sourceObject._references.Add(referenceTo); 37 | 38 | // Reference By 39 | var referenceBy = new ObjectReference( 40 | targetNode: sourceObject, 41 | referenceType: referenceType, 42 | direction: ReferenceDirection.ReferenceBy); 43 | targetObject._references.Add(referenceBy); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ObjectNode.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e3f979d8a08749f1b5ead6251639aa3e 3 | timeCreated: 1670974935 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ObjectNodeFactory.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Collections.Generic; 7 | using UnityEditor; 8 | using UnityEngine; 9 | 10 | namespace GiantParticle.InspectorGraph.Data.Nodes 11 | { 12 | internal class ObjectNodeFactory : IObjectNodeFactory 13 | { 14 | private Dictionary _nodes = new(); 15 | private Dictionary _nodesByAssetPath = new(); 16 | 17 | public void ClearRegistry() 18 | { 19 | _nodes.Clear(); 20 | _nodesByAssetPath.Clear(); 21 | } 22 | 23 | public ObjectNode CreateNode(Object obj, bool skipPath = false) 24 | { 25 | if (!skipPath) 26 | { 27 | var assetPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(obj); 28 | if (!string.IsNullOrEmpty(assetPath)) 29 | { 30 | if (_nodesByAssetPath.ContainsKey(assetPath)) return _nodesByAssetPath[assetPath]; 31 | var nodeAsset = new ObjectNode(obj); 32 | _nodesByAssetPath.Add(assetPath, nodeAsset); 33 | return nodeAsset; 34 | } 35 | } 36 | 37 | if (_nodes.ContainsKey(obj)) return _nodes[obj]; 38 | var node = new ObjectNode(obj); 39 | _nodes.Add(obj, node); 40 | return node; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ObjectNodeFactory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2ab5e2a40363455184271b53d1e64b1a 3 | timeCreated: 1693544061 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ObjectReference.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2022 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | namespace GiantParticle.InspectorGraph.Data.Nodes 7 | { 8 | internal class ObjectReference : IObjectReference 9 | { 10 | public ReferenceDirection Direction { get; } 11 | public ReferenceType RefType { get; } 12 | public IObjectNode TargetNode { get; } 13 | 14 | public ObjectReference(IObjectNode targetNode, ReferenceType referenceType, ReferenceDirection direction) 15 | { 16 | Direction = direction; 17 | RefType = referenceType; 18 | TargetNode = targetNode; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ObjectReference.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d5572b24bcfc47bea0e7fa0ebe807bbd 3 | timeCreated: 1670994528 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ReferenceDirection.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | namespace GiantParticle.InspectorGraph.Data.Nodes 7 | { 8 | internal enum ReferenceDirection 9 | { 10 | ReferenceTo = 0, 11 | ReferenceBy = 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ReferenceDirection.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b14532144f014cf1a379dcfd83cc7894 3 | timeCreated: 1693539168 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ReferenceType.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System; 7 | 8 | namespace GiantParticle.InspectorGraph.Data.Nodes 9 | { 10 | internal interface IExtendedReferenceType 11 | { 12 | string ToStringRepresentation(int value); 13 | } 14 | 15 | [Serializable] 16 | internal struct ReferenceType 17 | { 18 | public const string kNotAvailable = "N/A"; 19 | private const int kDirectValue = 1; 20 | public static readonly ReferenceType Direct = kDirectValue; 21 | private const int kNestedPrefabValue = 2; 22 | public static readonly ReferenceType NestedPrefab = kNestedPrefabValue; 23 | 24 | public int Value; 25 | 26 | public ReferenceType(int value) 27 | { 28 | Value = value; 29 | } 30 | 31 | public static implicit operator int(ReferenceType typeS) => typeS.Value; 32 | public static implicit operator ReferenceType(int v) => new ReferenceType(v); 33 | 34 | public override string ToString() 35 | { 36 | switch (Value) 37 | { 38 | case kDirectValue: 39 | return "Direct Reference"; 40 | case kNestedPrefabValue: 41 | return "Nested Prefab Reference"; 42 | } 43 | 44 | var instances = ReflectionHelper.InstantiateAllImplementations(); 45 | for (int i = 0; i < instances.Length; ++i) 46 | { 47 | var result = instances[i].ToStringRepresentation(Value); 48 | if (string.IsNullOrEmpty(result)) continue; 49 | return result; 50 | } 51 | 52 | return kNotAvailable; 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Nodes/ReferenceType.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8337dd5f356a4d088e4b44567bbec0bf 3 | timeCreated: 1678084305 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Stats.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 49927d5cc04547cd976ffb9f0dfb90f8 3 | timeCreated: 1696205012 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Stats/ObjectNodeStats.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using GiantParticle.InspectorGraph.Data.Nodes; 7 | 8 | namespace GiantParticle.InspectorGraph.Data.Stats 9 | { 10 | internal static class ObjectNodeStats 11 | { 12 | public static ReferenceStats GetReferenceStats(IObjectNode node, ReferenceDirection direction) 13 | { 14 | ReferenceStats stats = new ReferenceStats(); 15 | for (int i = 0; i < node.References.Count; ++i) 16 | { 17 | var reference = node.References[i]; 18 | if (reference.Direction != direction) continue; 19 | stats.AddToStats(reference); 20 | } 21 | 22 | return stats; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Stats/ObjectNodeStats.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b2482110d7954235958fe752a256a9b1 3 | timeCreated: 1696204981 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Stats/ReferenceByTypeStats.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Collections.Generic; 7 | using GiantParticle.InspectorGraph.Data.Nodes; 8 | using UnityEngine; 9 | 10 | namespace GiantParticle.InspectorGraph.Data.Stats 11 | { 12 | internal class ReferenceByTypeStats 13 | { 14 | public ReferenceType ReferenceType { get; } 15 | public int TotalReferences { get; private set; } 16 | public int TotalUniqueReference { get; private set; } 17 | private Dictionary _referencesByNode = new(); 18 | 19 | public ReferenceByTypeStats(ReferenceType type) 20 | { 21 | ReferenceType = type; 22 | } 23 | 24 | public void AddReference(Object obj) 25 | { 26 | ++TotalReferences; 27 | if (!_referencesByNode.ContainsKey(obj)) 28 | { 29 | _referencesByNode.Add(obj, 0); 30 | ++TotalUniqueReference; 31 | } 32 | 33 | _referencesByNode[obj] += 1; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Stats/ReferenceByTypeStats.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 85bac04f1c25401992520a2bd0a5b009 3 | timeCreated: 1696205029 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Stats/ReferenceStats.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2023 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using System.Collections.Generic; 7 | using GiantParticle.InspectorGraph.Data.Nodes; 8 | using UnityEngine; 9 | 10 | namespace GiantParticle.InspectorGraph.Data.Stats 11 | { 12 | internal class ReferenceStats 13 | { 14 | public int TotalReferences { get; private set; } 15 | public int UniqueReferences => _uniqueReferences.Count; 16 | 17 | private Dictionary _referenceByType = new(); 18 | private HashSet _uniqueReferences = new(); 19 | 20 | public int ReferenceTypes => _referenceByType.Count; 21 | 22 | public IEnumerable StatsByType 23 | { 24 | get 25 | { 26 | foreach (ReferenceByTypeStats referenceByTypeStats in _referenceByType.Values) 27 | { 28 | yield return referenceByTypeStats; 29 | } 30 | } 31 | } 32 | 33 | public void AddToStats(IObjectReference reference) 34 | { 35 | if (!_referenceByType.ContainsKey(reference.RefType)) 36 | _referenceByType.Add(reference.RefType, new ReferenceByTypeStats(reference.RefType)); 37 | 38 | var obj = reference.TargetNode.Object; 39 | _uniqueReferences.Add(obj); 40 | _referenceByType[reference.RefType].AddReference(obj); 41 | ++TotalReferences; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/Stats/ReferenceStats.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f2f094941024242bf8eaa415a935f84 3 | timeCreated: 1696205213 -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/WindowData.cs: -------------------------------------------------------------------------------- 1 | // ******************************** 2 | // (C) 2022 - Giant Particle Games 3 | // All rights reserved. 4 | // ******************************** 5 | 6 | using UnityEditor; 7 | using UnityEngine; 8 | 9 | namespace GiantParticle.InspectorGraph.Data 10 | { 11 | internal interface IWindowData 12 | { 13 | Object Object { get; } 14 | SerializedObject SerializedObject { get; } 15 | bool HasBeenManuallyMoved { get; set; } 16 | 17 | void CreateNewSerializedTarget(); 18 | void UpdateSerializedObject(SerializedObject newSerializedObject); 19 | } 20 | 21 | internal class WindowData : IWindowData 22 | { 23 | public Object Object { get; } 24 | 25 | public SerializedObject SerializedObject 26 | { 27 | get 28 | { 29 | if (_serializedObject == null) 30 | _serializedObject = new SerializedObject(Object); 31 | return _serializedObject; 32 | } 33 | private set => _serializedObject = value; 34 | } 35 | 36 | public bool HasBeenManuallyMoved { get; set; } 37 | private SerializedObject _serializedObject; 38 | 39 | public WindowData(Object reference) 40 | { 41 | Object = reference; 42 | } 43 | 44 | public void CreateNewSerializedTarget() 45 | { 46 | SerializedObject = new SerializedObject(Object); 47 | } 48 | 49 | public void UpdateSerializedObject(SerializedObject newSerializedObject) 50 | { 51 | SerializedObject = newSerializedObject; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/Data/WindowData.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d6c7494dc90049c4827c110f05da165b 3 | timeCreated: 1670391790 -------------------------------------------------------------------------------- /Editor/InspectorGraph/InspectorGraph.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7e7d60beb87b446eaa31dee8d6ae0d75 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: 7 | - m_ViewDataDictionary: {instanceID: 0} 8 | - WindowVisualTree: {fileID: 9197481963319205126, guid: 8295a7db89244485a90188dcf9f67322, 9 | type: 3} 10 | - InspectorWindowVisualTree: {fileID: 9197481963319205126, guid: 80aac4b715b9b40c7b5cd7364f6fe9e1, 11 | type: 3} 12 | executionOrder: 0 13 | icon: {instanceID: 0} 14 | userData: 15 | assetBundleName: 16 | assetBundleVariant: 17 | -------------------------------------------------------------------------------- /Editor/InspectorGraph/InspectorGraph.uxml: -------------------------------------------------------------------------------- 1 | 2 |