slowpoker/Assets/Mirror/Transports/SimpleWeb/Editor/ClientWebsocketSettingsDrawer.cs
2024-10-17 17:23:05 +03:00

72 lines
3.0 KiB
C#

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
}