Editor/ChitChat/DialogueInspector.cs
using Sandbox;
using Editor;
using System;
namespace ChitChat.Editor;
public class DialogueInspector : Widget
{
private SerializedObject _serializedObject;
private Type _actionType;
private readonly Layout _content;
public DialogueInspector(Widget parent) : base(parent)
{
WindowTitle = "Dialogue Inspector";
Name = "Dialogue Inspector";
Size = new Vector2(ChitChatEditorWindow.WINDOW_SIZE_X * 0.5f, ChitChatEditorWindow.WINDOW_SIZE_Y * 0.5f);
Layout = Layout.Column();
SetWindowIcon("tune");
ScrollArea area = new ScrollArea(this);
area.HorizontalScrollbarMode = ScrollbarMode.Off;
area.Canvas = new Widget(area);
area.Canvas.Layout = Layout.Column();
area.SetSizeMode(SizeMode.CanGrow, SizeMode.CanGrow);
_content = area.Canvas.Layout;
_content.Alignment = TextFlag.LeftTop;
Layout.Add(area);
}
public void OnDialogueSelected(SerializedProperty prop)
{
DialogueActionBase baseAction = prop.GetValue<DialogueActionBase>();
if (baseAction is SpeakAction speak)
{
_serializedObject = speak.GetSerialized();
_actionType = typeof(SpeakAction);
if (_serializedObject == null)
{
Log.Error("Could not convert DialogueAction to SerializedObject!");
Clear();
_serializedObject = null;
return;
}
OpenAction();
return;
}
else if (baseAction is EventAction)
{
return;
}
else if (baseAction is ChoiceAction choice)
{
_serializedObject = choice.GetSerialized();
_actionType = typeof(ChoiceAction);
if (_serializedObject == null)
{
Log.Error("Could not convert DialogueAction to SerializedObject!");
Clear();
_serializedObject = null;
return;
}
OpenAction();
return;
}
else
{
Log.Error("Dialogue Action not yet implemented in editor!");
Clear();
_serializedObject = null;
return;
}
}
/// <summary>
/// Opens an action if a serialized object already exits in DialogueInspector
/// </summary>
public void OpenAction()
{
if(_actionType == null || _serializedObject == null)
return;
Clear();
if (_actionType == typeof(SpeakAction))
{
_content.Add(new SpeakActionInspectorWidget(_serializedObject, this));
}
else if(_actionType == typeof(ChoiceAction))
{
_content.Add(new ChoiceActionInspectorWidget(_serializedObject, this));
}
}
public void Clear()
{
_content.Clear(true);
Update();
}
}