1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- using UnityEditor;
- using UnityEngine;
- namespace Mirror.SimpleWeb.Editor
- {
- #if UNITY_EDITOR
- [CustomPropertyDrawer(typeof(ClientWebsocketSettings))]
- public class ClientWebsocketSettingsDrawer : PropertyDrawer
- {
- readonly string websocketPortOptionName = nameof(ClientWebsocketSettings.ClientPortOption);
- readonly string customPortName = nameof(ClientWebsocketSettings.CustomClientPort);
- readonly GUIContent portOptionLabel = new GUIContent("Client Port Option",
- "Specify what port the client websocket connection uses (default same as server port)");
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
- {
- property.isExpanded = true;
- return SumPropertyHeights(property, websocketPortOptionName, customPortName);
- }
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- DrawPortSettings(position, property);
- }
- void DrawPortSettings(Rect position, SerializedProperty property)
- {
- SerializedProperty portOptionProp = property.FindPropertyRelative(websocketPortOptionName);
- SerializedProperty portProp = property.FindPropertyRelative(customPortName);
- float portOptionHeight = EditorGUI.GetPropertyHeight(portOptionProp);
- float portHeight = EditorGUI.GetPropertyHeight(portProp);
- float spacing = EditorGUIUtility.standardVerticalSpacing;
- bool wasEnabled = GUI.enabled;
- position.height = portOptionHeight;
- EditorGUI.PropertyField(position, portOptionProp, portOptionLabel);
- position.y += spacing + portOptionHeight;
- position.height = portHeight;
- WebsocketPortOption portOption = (WebsocketPortOption)portOptionProp.enumValueIndex;
- if (portOption == WebsocketPortOption.MatchWebpageProtocol || portOption == WebsocketPortOption.DefaultSameAsServer)
- {
- int port = 0;
- if (property.serializedObject.targetObject is SimpleWebTransport swt)
- if (portOption == WebsocketPortOption.MatchWebpageProtocol)
- port = swt.clientUseWss ? 443 : 80;
- else
- port = swt.port;
- GUI.enabled = false;
- EditorGUI.IntField(position, new GUIContent("Client Port"), port);
- GUI.enabled = wasEnabled;
- }
- else
- EditorGUI.PropertyField(position, portProp);
- position.y += spacing + portHeight;
- }
- float SumPropertyHeights(SerializedProperty property, params string[] propertyNames)
- {
- float totalHeight = 0;
- foreach (var name in propertyNames)
- totalHeight += EditorGUI.GetPropertyHeight(property.FindPropertyRelative(name)) + EditorGUIUtility.standardVerticalSpacing;
- return totalHeight;
- }
- }
- #endif
- }
|