using UnityEngine;
namespace Unity.VisualScripting
{
[Editor(typeof(IMachine))]
public class MachineEditor : Inspector
{
public MachineEditor(Metadata metadata) : base(metadata) { }
private Metadata nestMetadata => metadata[nameof(IMachine.nest)];
private Metadata graphMetadata => nestMetadata[nameof(IGraphNest.graph)];
protected Metadata headerTitleMetadata => graphMetadata[nameof(IGraph.title)];
protected Metadata headerSummaryMetadata => graphMetadata[nameof(IGraph.summary)];
protected virtual bool showHeader => graphMetadata.value != null;
protected virtual bool showConfiguration => false;
protected sealed override float GetHeight(float width, GUIContent label)
{
var height = 0f;
if (showHeader)
{
height += GetHeaderHeight(width);
}
height += GetNestHeight(width);
if (showConfiguration)
{
height += GetConfigurationHeight(width);
}
return height;
}
protected sealed override void OnGUI(Rect position, GUIContent label)
{
position = BeginLabeledBlock(metadata, position, GUIContent.none);
if (showHeader)
{
var headerPosition = position;
headerPosition.x = 0;
headerPosition.width = LudiqGUIUtility.currentInspectorWidthWithoutScrollbar;
OnHeaderGUI(headerPosition);
}
var nestPosition = position.VerticalSection(ref y, LudiqGUI.GetEditorHeight(this, nestMetadata, position.width));
OnNestGUI(nestPosition);
if (showConfiguration)
{
OnConfigurationGUI(position);
}
EndBlock(metadata);
}
protected virtual float GetHeaderHeight(float width)
{
return LudiqGUI.GetHeaderHeight(this, headerTitleMetadata, headerSummaryMetadata, null, LudiqGUIUtility.currentInspectorWidthWithoutScrollbar);
}
protected virtual void OnHeaderGUI(Rect headerPosition)
{
LudiqGUI.OnHeaderGUI(headerTitleMetadata, headerSummaryMetadata, null, headerPosition, ref y);
}
protected virtual float GetNestHeight(float width)
{
return LudiqGUI.GetEditorHeight(this, nestMetadata, width);
}
protected virtual void OnNestGUI(Rect nestPosition)
{
LudiqGUI.Editor(nestMetadata, nestPosition);
}
protected virtual float GetConfigurationHeight(float width)
{
return 0;
}
protected virtual void OnConfigurationGUI(Rect position)
{
}
}
}