97 lines
3.2 KiB
C#
97 lines
3.2 KiB
C#
#if UNITY_EDITOR
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using System;
|
|
|
|
namespace O3DWB
|
|
{
|
|
[Serializable]
|
|
public abstract class GUIRenderableContent
|
|
{
|
|
#region Protected Variables
|
|
[SerializeField]
|
|
protected bool _isVisible = true;
|
|
[SerializeField]
|
|
protected bool _toggleVisibilityBeforeRender = false;
|
|
[SerializeField]
|
|
protected string _visibilityToggleLabel = "";
|
|
[SerializeField]
|
|
protected int _visibilityToggleIndent = 0;
|
|
[SerializeField]
|
|
protected bool _indentContent = false;
|
|
[SerializeField]
|
|
protected bool _surroundWithBox = false;
|
|
#endregion
|
|
|
|
#region Public Properties
|
|
public bool IsVisible { get { return _isVisible; } set { _isVisible = value; } }
|
|
public bool ToggleVisibilityBeforeRender { get { return _toggleVisibilityBeforeRender; } set { _toggleVisibilityBeforeRender = value; } }
|
|
public string VisibilityToggleLabel { get { return _visibilityToggleLabel; } set { _visibilityToggleLabel = value; } }
|
|
public int VisibilityToggleIndent { get { return _visibilityToggleIndent; } set { _visibilityToggleIndent = value; } }
|
|
public bool IndentContent { get { return _indentContent; } set { _indentContent = value; } }
|
|
public bool SurroundWithBox { get { return _surroundWithBox; } set { _surroundWithBox = value; } }
|
|
#endregion
|
|
|
|
#region Public Methods
|
|
public void Render()
|
|
{
|
|
EditorGUILayout.BeginVertical();
|
|
if (_toggleVisibilityBeforeRender) ToggleVisibilityAndRender();
|
|
else if(IsVisible) RenderGUIContent();
|
|
EditorGUILayout.EndVertical();
|
|
}
|
|
#endregion
|
|
|
|
#region Protected Abstract Methods
|
|
protected abstract void RenderContent();
|
|
#endregion
|
|
|
|
#region Private Methods
|
|
private void ToggleVisibilityAndRender()
|
|
{
|
|
ToggleVisibility();
|
|
if (IsVisible) RenderGUIContent();
|
|
}
|
|
|
|
private void ToggleVisibility()
|
|
{
|
|
EditorGUI.indentLevel += _visibilityToggleIndent;
|
|
bool newBool = EditorGUILayout.Foldout(IsVisible, _visibilityToggleLabel);
|
|
EditorGUI.indentLevel -= _visibilityToggleIndent;
|
|
|
|
if (newBool != IsVisible) IsVisible = newBool;
|
|
}
|
|
|
|
private void RenderGUIContent()
|
|
{
|
|
if (_indentContent) IndentAndRender();
|
|
else RenderNoIndent();
|
|
}
|
|
|
|
private void IndentAndRender()
|
|
{
|
|
int indentAmount = _toggleVisibilityBeforeRender ? _visibilityToggleIndent + 1 : 1;
|
|
EditorGUI.indentLevel += indentAmount;
|
|
|
|
if (_surroundWithBox) SurroundWithBoxAndRender();
|
|
else RenderContent();
|
|
|
|
EditorGUI.indentLevel -= indentAmount;
|
|
}
|
|
|
|
private void RenderNoIndent()
|
|
{
|
|
if (_surroundWithBox) SurroundWithBoxAndRender();
|
|
else RenderContent();
|
|
}
|
|
|
|
private void SurroundWithBoxAndRender()
|
|
{
|
|
EditorGUILayoutEx.BeginVerticalBox();
|
|
RenderContent();
|
|
EditorGUILayoutEx.EndVerticalBox();
|
|
}
|
|
#endregion
|
|
}
|
|
}
|
|
#endif |