MLAPI/MLAPI-Editor/NetworkingManagerEditor.cs

76 lines
2.8 KiB
C#

using MLAPI.MonoBehaviours.Core;
using UnityEditor;
using UnityEngine;
using UnityEditorInternal;
[CustomEditor(typeof(NetworkingManager), true)]
[CanEditMultipleObjects]
public class NetworkingManagerEditor : Editor
{
private ReorderableList networkedObjectList;
private NetworkingManager networkingManager;
private bool initialized;
private void Init()
{
if (initialized)
return;
initialized = true;
networkingManager = (NetworkingManager)target;
}
private void OnEnable()
{
networkedObjectList = new ReorderableList(serializedObject, serializedObject.FindProperty("NetworkConfig").FindPropertyRelative("NetworkedPrefabs"), true, true, true, true);
networkedObjectList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
{
var element = networkedObjectList.serializedProperty.GetArrayElementAtIndex(index);
rect.y += 2;
EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width - 30, EditorGUIUtility.singleLineHeight),
element.FindPropertyRelative("prefab"), GUIContent.none);
EditorGUI.PropertyField(new Rect(rect.x + rect.width - 30, rect.y, 30, EditorGUIUtility.singleLineHeight),
element.FindPropertyRelative("playerPrefab"), GUIContent.none);
};
networkedObjectList.drawHeaderCallback = (Rect rect) => {
EditorGUI.LabelField(rect, "Networked Prefabs");
};
}
public override void OnInspectorGUI()
{
Init();
if (!networkingManager.isServer && !networkingManager.isClient)
{
EditorGUILayout.Space();
serializedObject.Update();
networkedObjectList.DoLayoutList();
serializedObject.ApplyModifiedProperties();
base.OnInspectorGUI(); //Only draw if we don't have a running client or server
}
else
{
string instanceType = "";
if (networkingManager.isHost)
instanceType = "Host";
else if (networkingManager.isServer)
instanceType = "Server";
else if (networkingManager.isClient)
instanceType = "Client";
EditorGUILayout.HelpBox("You cannot edit the NetworkConfig when a " + instanceType + " is running", MessageType.Info);
if (GUILayout.Toggle(false, "Stop " + instanceType, EditorStyles.miniButtonMid))
{
if (networkingManager.isHost)
networkingManager.StopHost();
else if (networkingManager.isServer)
networkingManager.StopServer();
else if (networkingManager.isClient)
networkingManager.StopClient();
}
}
Repaint();
}
}