Skip to content

Commit

Permalink
fix: adding OnValidate to NetworkManager
Browse files Browse the repository at this point in the history
this should help set references from recent change. by default will automatically set up references, uncheck ValidateReferences to disable this option
  • Loading branch information
James-Frowen committed May 5, 2023
1 parent 2a69409 commit 5a54b3a
Showing 1 changed file with 56 additions and 7 deletions.
63 changes: 56 additions & 7 deletions Assets/Mirage/Runtime/NetworkManager.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using UnityEngine;
using UnityEngine.Serialization;

namespace Mirage
{
Expand All @@ -18,18 +17,16 @@ public enum NetworkManagerMode
[DisallowMultipleComponent]
public class NetworkManager : MonoBehaviour
{
[FormerlySerializedAs("server")]
public NetworkServer Server;
[FormerlySerializedAs("client")]
public NetworkClient Client;
[FormerlySerializedAs("sceneManager")]
[FormerlySerializedAs("SceneManager")]
public NetworkSceneManager NetworkSceneManager;
[FormerlySerializedAs("serverObjectManager")]
public ServerObjectManager ServerObjectManager;
[FormerlySerializedAs("clientObjectManager")]
public ClientObjectManager ClientObjectManager;

[Tooltip("Will setup referecnes to automatically")]

This comment has been minimized.

Copy link
@vladqwerty435

vladqwerty435 May 8, 2023

Typo

public bool ValidateReferences = true;


/// <summary>
/// True if the server or client is started and running
/// <para>This is set True in StartServer / StartClient, and set False in StopServer / StopClient</para>
Expand All @@ -53,5 +50,57 @@ public NetworkManagerMode NetworkMode
return NetworkManagerMode.Client;
}
}


private void OnValidate()
{
if (!ValidateReferences)
return;

FindIfNull(ref Server);
FindIfNull(ref Client);
FindIfNull(ref NetworkSceneManager);
FindIfNull(ref ServerObjectManager);
FindIfNull(ref ClientObjectManager);

if (Server != null)
{
SetIfNull(ref Server.ObjectManager, ServerObjectManager);
}

if (Client != null)
{
SetIfNull(ref Client.ObjectManager, ClientObjectManager);
}

if (NetworkSceneManager != null)
{
SetIfNull(ref NetworkSceneManager.Server, Server);
SetIfNull(ref NetworkSceneManager.Client, Client);
SetIfNull(ref NetworkSceneManager.ServerObjectManager, ServerObjectManager);
SetIfNull(ref NetworkSceneManager.ClientObjectManager, ClientObjectManager);
}
}

private void FindIfNull<T>(ref T field) where T : class
{
if (field == null && gameObject.TryGetComponent<T>(out var value))
{
#if UNITY_EDITOR
UnityEditor.Undo.RecordObject(this, "Setting Referecne on NetworkManager");
#endif
field = value;
}
}
private void SetIfNull<T>(ref T field, T value) where T : class
{
if (field == null && value != null)
{
#if UNITY_EDITOR
UnityEditor.Undo.RecordObject(this, "Setting Referecne on NetworkManager");
#endif
field = value;
}
}
}
}

0 comments on commit 5a54b3a

Please sign in to comment.