123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- // ----------------------------------------------------------------------------
- // <copyright file="PhotonGUI.cs" company="Exit Games GmbH">
- // PhotonNetwork Framework for Unity - Copyright (C) 2018 Exit Games GmbH
- // </copyright>
- // <summary>
- // GUI scripts for the Editor.
- // </summary>
- // <author>developer@exitgames.com</author>
- // ----------------------------------------------------------------------------
- using UnityEngine;
- using UnityEditor;
- namespace Photon.Pun
- {
- public class PhotonGUI
- {
- #region Styles
- static GUIStyle m_DefaultTitleStyle;
- public static GUIStyle DefaultTitleStyle
- {
- get
- {
- if (m_DefaultTitleStyle == null)
- {
- m_DefaultTitleStyle = new GUIStyle();
- m_DefaultTitleStyle.border = new RectOffset(2, 2, 2, 1);
- m_DefaultTitleStyle.margin = new RectOffset(5, 5, 5, 0);
- m_DefaultTitleStyle.padding = new RectOffset(5, 5, 0, 0);
- m_DefaultTitleStyle.alignment = TextAnchor.MiddleLeft;
- m_DefaultTitleStyle.normal.background = ReorderableListResources.texTitleBackground;
- m_DefaultTitleStyle.normal.textColor = EditorGUIUtility.isProSkin
- ? new Color(0.8f, 0.8f, 0.8f)
- : new Color(0.2f, 0.2f, 0.2f);
- }
- return m_DefaultTitleStyle;
- }
- }
- static GUIStyle m_DefaultContainerStyle;
- public static GUIStyle DefaultContainerStyle
- {
- get
- {
- if (m_DefaultContainerStyle == null)
- {
- m_DefaultContainerStyle = new GUIStyle();
- m_DefaultContainerStyle.border = new RectOffset(2, 2, 1, 2);
- m_DefaultContainerStyle.margin = new RectOffset(5, 5, 5, 5);
- m_DefaultContainerStyle.padding = new RectOffset(1, 1, 2, 2);
- m_DefaultContainerStyle.normal.background = ReorderableListResources.texContainerBackground;
- }
- return m_DefaultContainerStyle;
- }
- }
- static GUIStyle m_DefaultAddButtonStyle;
- public static GUIStyle DefaultAddButtonStyle
- {
- get
- {
- if (m_DefaultAddButtonStyle == null)
- {
- m_DefaultAddButtonStyle = new GUIStyle();
- m_DefaultAddButtonStyle.fixedWidth = 30;
- m_DefaultAddButtonStyle.fixedHeight = 16;
- m_DefaultAddButtonStyle.normal.background = ReorderableListResources.texAddButton;
- m_DefaultAddButtonStyle.active.background = ReorderableListResources.texAddButtonActive;
- }
- return m_DefaultAddButtonStyle;
- }
- }
- static GUIStyle m_DefaultRemoveButtonStyle;
- public static GUIStyle DefaultRemoveButtonStyle
- {
- get
- {
- if (m_DefaultRemoveButtonStyle == null)
- {
- m_DefaultRemoveButtonStyle = new GUIStyle();
- m_DefaultRemoveButtonStyle.fixedWidth = 30;
- m_DefaultRemoveButtonStyle.fixedHeight = 20;
- m_DefaultRemoveButtonStyle.active.background = ReorderableListResources.CreatePixelTexture("Dark Pixel (List GUI)", new Color32(18, 18, 18, 255));
- m_DefaultRemoveButtonStyle.imagePosition = ImagePosition.ImageOnly;
- m_DefaultRemoveButtonStyle.alignment = TextAnchor.MiddleCenter;
- }
- return m_DefaultRemoveButtonStyle;
- }
- }
- static GUIStyle m_DefaultContainerRowStyle;
- public static GUIStyle DefaultContainerRowStyle
- {
- get
- {
- if (m_DefaultContainerRowStyle == null)
- {
- m_DefaultContainerRowStyle = new GUIStyle();
- m_DefaultContainerRowStyle.border = new RectOffset(2, 2, 2, 2);
- m_DefaultContainerRowStyle.margin = new RectOffset(5, 5, 5, 5);
- m_DefaultContainerRowStyle.padding = new RectOffset(1, 1, 2, 2);
- m_DefaultContainerRowStyle.normal.background = ReorderableListResources.texContainerBackground;
- }
- return m_DefaultContainerRowStyle;
- }
- }
- static GUIStyle m_FoldoutBold;
- public static GUIStyle FoldoutBold
- {
- get
- {
- if (m_FoldoutBold == null)
- {
- m_FoldoutBold = new GUIStyle(EditorStyles.foldout);
- m_FoldoutBold.fontStyle = FontStyle.Bold;
- }
- return m_FoldoutBold;
- }
- }
- static GUIStyle m_RichLabel;
- public static GUIStyle RichLabel
- {
- get
- {
- if (m_RichLabel == null)
- {
- m_RichLabel = new GUIStyle(GUI.skin.label);
- m_RichLabel.richText = true;
- m_RichLabel.wordWrap = true;
- }
- return m_RichLabel;
- }
- }
- #endregion
- internal static string GetIconPath(string iconFileName)
- {
- string _thisIconPath = PhotonNetwork.FindAssetPath ("PhotonGUI");
- if (string.IsNullOrEmpty(_thisIconPath))
- {
- _thisIconPath = "Assets/Photon/PhotonUnityNetworking/Code/Editor/"+iconFileName;
- }
- else
- {
- _thisIconPath = _thisIconPath.Replace("PhotonGUI.cs", iconFileName);
- }
- return _thisIconPath;
- }
-
- static Texture2D m_HelpIcon;
- public static Texture2D HelpIcon
- {
- get
- {
- if (m_HelpIcon == null)
- {
- m_HelpIcon = AssetDatabase.LoadAssetAtPath(GetIconPath("help.png"), typeof(Texture2D)) as Texture2D;
- }
-
- return m_HelpIcon;
- }
- }
-
-
- static Texture2D m_CopyIcon;
- static Texture2D m_CopyIconPro;
-
- public static Texture2D CopyIcon
- {
- get
- {
- if (EditorGUIUtility.isProSkin)
- {
- if (m_CopyIconPro == null)
- {
- m_CopyIconPro = AssetDatabase.LoadAssetAtPath(GetIconPath("CopyIconPro.png"), typeof(Texture2D)) as Texture2D;
- }
- return m_CopyIconPro;
- }
-
- if (m_CopyIcon == null)
- {
- m_CopyIcon = AssetDatabase.LoadAssetAtPath(GetIconPath("CopyIcon.png"), typeof(Texture2D)) as Texture2D;
- }
- return m_CopyIcon;
- }
- }
- #region Interface
- public static void ContainerHeader(string headline)
- {
- DoContainerHeader(headline, 27, 0);
- }
- public static bool ContainerHeaderToggle(string headline, bool toggle)
- {
- return DoContainerHeaderToggle(headline, toggle);
- }
- public static bool ContainerHeaderFoldout(string headline, bool foldout, System.Action buttonAction = null, string buttonName = null)
- {
- return DoContainerHeaderFoldout(headline, foldout, buttonAction, buttonName);
- }
- public static Rect ContainerBody(float height)
- {
- return DoContainerBody(height);
- }
- public static bool AddButton()
- {
- Rect controlRect = EditorGUILayout.GetControlRect(false, DefaultAddButtonStyle.fixedHeight - 5);
- controlRect.yMin -= 5;
- controlRect.yMax -= 5;
- Rect addButtonRect = new Rect(controlRect.xMax - DefaultAddButtonStyle.fixedWidth,
- controlRect.yMin,
- DefaultAddButtonStyle.fixedWidth,
- DefaultAddButtonStyle.fixedHeight);
- return GUI.Button(addButtonRect, "", DefaultAddButtonStyle);
- }
- public static void DrawSplitter(Rect position)
- {
- ReorderableListResources.DrawTexture(position, ReorderableListResources.texItemSplitter);
- }
- public static void DrawGizmoOptions(
- Rect position,
- string label,
- SerializedProperty gizmoEnabledProperty,
- SerializedProperty gizmoColorProperty,
- SerializedProperty gizmoTypeProperty,
- SerializedProperty gizmoSizeProperty)
- {
- float height = EditorGUIUtility.singleLineHeight;
- float flexibleWidth = Mathf.Max(40, position.width - EditorGUIUtility.labelWidth - 20 - 75 - 5 - 40 - 5);
- Rect labelRect = new Rect(position.xMin, position.yMin, EditorGUIUtility.labelWidth, height);
- GUI.Label(labelRect, label);
- Rect enabledRect = new Rect(labelRect.xMax, labelRect.yMin, 20, height);
- EditorGUI.PropertyField(enabledRect, gizmoEnabledProperty, GUIContent.none);
- bool oldGUIEnabled = GUI.enabled;
- GUI.enabled = gizmoEnabledProperty.boolValue;
- Rect colorRect = new Rect(enabledRect.xMax + 5, labelRect.yMin, 70, height);
- EditorGUI.PropertyField(colorRect, gizmoColorProperty, GUIContent.none);
- Rect typeRect = new Rect(colorRect.xMax + 5, labelRect.yMin, flexibleWidth * 0.7f, height);
- EditorGUI.PropertyField(typeRect, gizmoTypeProperty, GUIContent.none);
- Rect sizeLabelRect = new Rect(typeRect.xMax + 10, labelRect.yMin, 30, height);
- GUI.Label(sizeLabelRect, "Size");
- Rect sizeRect = new Rect(sizeLabelRect.xMax + 5, labelRect.yMin, flexibleWidth * 0.3f, height);
- EditorGUI.PropertyField(sizeRect, gizmoSizeProperty, GUIContent.none);
- GUI.enabled = oldGUIEnabled;
- }
- #endregion
- #region Implementation
- static Rect DoContainerBody(float height)
- {
- Rect controlRect = EditorGUILayout.GetControlRect(false, height);
- controlRect.yMin -= 3;
- controlRect.yMax -= 2;
- int controlID = GUIUtility.GetControlID(FocusType.Passive, controlRect);
- if (Event.current.type == EventType.Repaint)
- {
- PhotonGUI.DefaultContainerStyle.Draw(controlRect, GUIContent.none, controlID);
- }
- return controlRect;
- }
- static bool DoContainerHeaderToggle(string headline, bool toggle)
- {
- Rect rect = DoContainerHeader(headline, 27, 15);
- Rect toggleRect = new Rect(rect.xMin + 5, rect.yMin + 5, EditorGUIUtility.labelWidth, rect.height);
- return EditorGUI.Toggle(toggleRect, toggle);
- }
- static bool DoContainerHeaderFoldout(string headline, bool foldout, System.Action buttonAction = null, string buttonLabel = null, float buttonWidth = 48)
- {
- bool showButton = buttonAction != null;
- Rect rect = DoContainerHeader("", 27, 0f);
- // Shorten foldout label if button is present, so it doesn't interfere with clicking.
- float foldoutWidth = rect.width - (showButton ? 15 + buttonWidth: 15);
- Rect foldoutRect = new Rect(rect.xMin + 15, rect.yMin + 5, foldoutWidth, 16);
- bool expanded = EditorGUI.Foldout(foldoutRect, foldout, headline, FoldoutBold);
- // If a button is defined show it, and invoke action on click.
- if (showButton && GUI.Button(new Rect(foldoutRect) { x = foldoutRect.xMax, height = 17, width = buttonWidth - 4 }, buttonLabel == null ? "" : buttonLabel))
- {
- buttonAction.Invoke();
- }
- return expanded;
- }
- static Rect DoContainerHeader(string headline, float height, float contentOffset)
- {
- GUILayout.Space(5);
- Rect controlRect = EditorGUILayout.GetControlRect(false, height);
- int controlID = GUIUtility.GetControlID(FocusType.Passive, controlRect);
- if (Event.current.type == EventType.Repaint)
- {
- PhotonGUI.DefaultTitleStyle.Draw(controlRect, GUIContent.none, controlID);
- Rect labelRect = new Rect(controlRect.xMin + 5 + contentOffset, controlRect.yMin + 5, controlRect.width, controlRect.height);
- GUI.Label(labelRect, headline, EditorStyles.boldLabel);
- }
- return controlRect;
- }
- #endregion
- }
- }
|