온라인 구현
This commit is contained in:
363
Assets/Photon/PhotonUnityNetworking/Code/Editor/PhotonGUI.cs
Normal file
363
Assets/Photon/PhotonUnityNetworking/Code/Editor/PhotonGUI.cs
Normal file
@@ -0,0 +1,363 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// <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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user