GUIRenderableContent.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. using UnityEditor;
  4. using System;
  5. namespace O3DWB
  6. {
  7. [Serializable]
  8. public abstract class GUIRenderableContent
  9. {
  10. #region Protected Variables
  11. [SerializeField]
  12. protected bool _isVisible = true;
  13. [SerializeField]
  14. protected bool _toggleVisibilityBeforeRender = false;
  15. [SerializeField]
  16. protected string _visibilityToggleLabel = "";
  17. [SerializeField]
  18. protected int _visibilityToggleIndent = 0;
  19. [SerializeField]
  20. protected bool _indentContent = false;
  21. [SerializeField]
  22. protected bool _surroundWithBox = false;
  23. #endregion
  24. #region Public Properties
  25. public bool IsVisible { get { return _isVisible; } set { _isVisible = value; } }
  26. public bool ToggleVisibilityBeforeRender { get { return _toggleVisibilityBeforeRender; } set { _toggleVisibilityBeforeRender = value; } }
  27. public string VisibilityToggleLabel { get { return _visibilityToggleLabel; } set { _visibilityToggleLabel = value; } }
  28. public int VisibilityToggleIndent { get { return _visibilityToggleIndent; } set { _visibilityToggleIndent = value; } }
  29. public bool IndentContent { get { return _indentContent; } set { _indentContent = value; } }
  30. public bool SurroundWithBox { get { return _surroundWithBox; } set { _surroundWithBox = value; } }
  31. #endregion
  32. #region Public Methods
  33. public void Render()
  34. {
  35. EditorGUILayout.BeginVertical();
  36. if (_toggleVisibilityBeforeRender) ToggleVisibilityAndRender();
  37. else if(IsVisible) RenderGUIContent();
  38. EditorGUILayout.EndVertical();
  39. }
  40. #endregion
  41. #region Protected Abstract Methods
  42. protected abstract void RenderContent();
  43. #endregion
  44. #region Private Methods
  45. private void ToggleVisibilityAndRender()
  46. {
  47. ToggleVisibility();
  48. if (IsVisible) RenderGUIContent();
  49. }
  50. private void ToggleVisibility()
  51. {
  52. EditorGUI.indentLevel += _visibilityToggleIndent;
  53. bool newBool = EditorGUILayout.Foldout(IsVisible, _visibilityToggleLabel);
  54. EditorGUI.indentLevel -= _visibilityToggleIndent;
  55. if (newBool != IsVisible) IsVisible = newBool;
  56. }
  57. private void RenderGUIContent()
  58. {
  59. if (_indentContent) IndentAndRender();
  60. else RenderNoIndent();
  61. }
  62. private void IndentAndRender()
  63. {
  64. int indentAmount = _toggleVisibilityBeforeRender ? _visibilityToggleIndent + 1 : 1;
  65. EditorGUI.indentLevel += indentAmount;
  66. if (_surroundWithBox) SurroundWithBoxAndRender();
  67. else RenderContent();
  68. EditorGUI.indentLevel -= indentAmount;
  69. }
  70. private void RenderNoIndent()
  71. {
  72. if (_surroundWithBox) SurroundWithBoxAndRender();
  73. else RenderContent();
  74. }
  75. private void SurroundWithBoxAndRender()
  76. {
  77. EditorGUILayoutEx.BeginVerticalBox();
  78. RenderContent();
  79. EditorGUILayoutEx.EndVerticalBox();
  80. }
  81. #endregion
  82. }
  83. }
  84. #endif