FiE-Game/Assets/Photon Unity Networking/Editor/PhotonNetwork/PhotonGUI.cs
2023-07-19 18:11:02 +01:00

280 lines
9.5 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections;
using Rotorz.ReorderableList.Internal;
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
static Texture2D m_HelpIcon;
public static Texture2D HelpIcon
{
get
{
if( m_HelpIcon == null )
{
m_HelpIcon = AssetDatabase.LoadAssetAtPath( "Assets/Photon Unity Networking/Editor/PhotonNetwork/help.png", typeof( Texture2D ) ) as Texture2D;
}
return m_HelpIcon;
}
}
#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 )
{
return DoContainerHeaderFoldout( headline, foldout );
}
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 )
{
Rect rect = DoContainerHeader( "", 27, 0f );
Rect foldoutRect = new Rect( rect.xMin + 15, rect.yMin + 5, rect.width, rect.height );
return EditorGUI.Foldout( foldoutRect, foldout, headline, FoldoutBold );
}
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
}