From e953ea7e4af74872cd8bbcb312ca4eb75edf84c5 Mon Sep 17 00:00:00 2001 From: uwee Date: Sat, 20 Feb 2021 15:17:35 -0500 Subject: [PATCH 1/3] feat: add more control over player spawning --- Assets/Mirage/Runtime/PlayerSpawner.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Assets/Mirage/Runtime/PlayerSpawner.cs b/Assets/Mirage/Runtime/PlayerSpawner.cs index 349c97f4d59..f3b0fcd47ac 100644 --- a/Assets/Mirage/Runtime/PlayerSpawner.cs +++ b/Assets/Mirage/Runtime/PlayerSpawner.cs @@ -7,7 +7,7 @@ namespace Mirage { /// - /// Spawns a player as soon as the connection is authenticated + /// Spawns a player as soon as the connection is authenticated /// public class PlayerSpawner : MonoBehaviour { @@ -26,6 +26,11 @@ public class PlayerSpawner : MonoBehaviour [FormerlySerializedAs("playerPrefab")] public NetworkIdentity PlayerPrefab; + /// + /// Opertionally delay the spawn. + /// + public bool AutoSpawn = true; + // Start is called before the first frame update public virtual void Start() { @@ -89,8 +94,13 @@ private void OnServerAuthenticated(INetworkConnection connection) /// Connection to the server. private void OnClientSceneChanged(string sceneName, SceneOperation sceneOperation) { - if(sceneOperation == SceneOperation.Normal) - Client.Send(new AddPlayerMessage()); + if (AutoSpawn && sceneOperation == SceneOperation.Normal) + RequestServerSpawnPlayer(); + } + + public virtual void RequestServerSpawnPlayer() + { + Client.Send(new AddPlayerMessage()); } void OnServerAddPlayerInternal(INetworkConnection conn, AddPlayerMessage msg) From 562251f9f9fbc4ffe90a73440aaceb57681630d0 Mon Sep 17 00:00:00 2001 From: uwee Date: Sat, 20 Feb 2021 15:17:40 -0500 Subject: [PATCH 2/3] add tests --- .../Tests/Runtime/Host/PlayerSpawnerTest.cs | 61 +++++++++++++++++++ .../Runtime/Host/PlayerSpawnerTest.cs.meta | 11 ++++ 2 files changed, 72 insertions(+) create mode 100644 Assets/Tests/Runtime/Host/PlayerSpawnerTest.cs create mode 100644 Assets/Tests/Runtime/Host/PlayerSpawnerTest.cs.meta diff --git a/Assets/Tests/Runtime/Host/PlayerSpawnerTest.cs b/Assets/Tests/Runtime/Host/PlayerSpawnerTest.cs new file mode 100644 index 00000000000..24410b27ae0 --- /dev/null +++ b/Assets/Tests/Runtime/Host/PlayerSpawnerTest.cs @@ -0,0 +1,61 @@ +using NUnit.Framework; +using UnityEngine; + +namespace Mirage.Tests.Host +{ + public class PlayerSpawnerTest : HostSetup + { + AssetBundle bundle; + GameObject player; + PlayerSpawner spawner; + + public override void ExtraSetup() + { + bundle = AssetBundle.LoadFromFile("Assets/Tests/Runtime/TestScene/testscene"); + + spawner = networkManagerGo.AddComponent(); + + spawner.Client = client; + spawner.Server = server; + spawner.SceneManager = sceneManager; + spawner.ClientObjectManager = clientObjectManager; + spawner.ServerObjectManager = serverObjectManager; + + player = new GameObject(); + NetworkIdentity identity = player.AddComponent(); + spawner.PlayerPrefab = identity; + + spawner.AutoSpawn = false; + + spawner.Start(); + } + + public override void ExtraTearDown() + { + bundle.Unload(true); + Object.Destroy(player); + } + + [Test] + public void DontAutoSpawnTest() + { + bool invokeAddPlayerMessage = false; + server.LocalConnection.RegisterHandler(msg => invokeAddPlayerMessage = true); + + sceneManager.ChangeServerScene("Assets/Mirror/Tests/Runtime/testScene.unity"); + + Assert.That(invokeAddPlayerMessage, Is.False); + } + + [Test] + public void ManualSpawnTest() + { + bool invokeAddPlayerMessage = false; + server.LocalConnection.RegisterHandler(msg => invokeAddPlayerMessage = true); + + spawner.RequestServerSpawnPlayer(); + + Assert.That(invokeAddPlayerMessage, Is.False); + } + } +} diff --git a/Assets/Tests/Runtime/Host/PlayerSpawnerTest.cs.meta b/Assets/Tests/Runtime/Host/PlayerSpawnerTest.cs.meta new file mode 100644 index 00000000000..d64b5b84eee --- /dev/null +++ b/Assets/Tests/Runtime/Host/PlayerSpawnerTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a47022201d132046a60116acfee6a19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 560f09e4b040bec93def9c9e0102db14c0cb0f2c Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Mon, 22 Feb 2021 09:49:09 -0600 Subject: [PATCH 3/3] Update Assets/Mirage/Runtime/PlayerSpawner.cs --- Assets/Mirage/Runtime/PlayerSpawner.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirage/Runtime/PlayerSpawner.cs b/Assets/Mirage/Runtime/PlayerSpawner.cs index f3b0fcd47ac..a3963abb3f4 100644 --- a/Assets/Mirage/Runtime/PlayerSpawner.cs +++ b/Assets/Mirage/Runtime/PlayerSpawner.cs @@ -27,7 +27,7 @@ public class PlayerSpawner : MonoBehaviour public NetworkIdentity PlayerPrefab; /// - /// Opertionally delay the spawn. + /// Whether to span the player upon connection automatically /// public bool AutoSpawn = true;