protected void CallRegisterPrefab(GameObject prefab, RegisterPrefabOverload overload, Guid guid)
        {
            SpawnDelegate        spawnHandler         = new SpawnDelegate((x, y) => null);
            SpawnHandlerDelegate spawnHandlerDelegate = new SpawnHandlerDelegate(x => null);
            UnSpawnDelegate      unspawnHandler       = new UnSpawnDelegate(x => {});

            switch (overload)
            {
            case RegisterPrefabOverload.Prefab_NewAssetId:
                NetworkClient.RegisterPrefab(prefab, guid);
                break;

            case RegisterPrefabOverload.Prefab_SpawnDelegate_NewAssetId:
                NetworkClient.RegisterPrefab(prefab, guid, spawnHandler, unspawnHandler);
                break;

            case RegisterPrefabOverload.Prefab_SpawnHandlerDelegate_NewAssetId:
                NetworkClient.RegisterPrefab(prefab, guid, spawnHandlerDelegate, unspawnHandler);
                break;

            case RegisterPrefabOverload.Prefab:
            case RegisterPrefabOverload.Prefab_SpawnDelegate:
            case RegisterPrefabOverload.Prefab_SpawnHandlerDelegate:
                Debug.LogError("Overload did not have guid parameter");
                break;

            default:
                Debug.LogError("Overload not found");
                break;
            }
        }
        protected void CallRegisterPrefab(GameObject prefab, RegisterPrefabOverload overload, SpawnHandlerDelegate spawnHandlerDelegate)
        {
            UnSpawnDelegate unspawnHandler = new UnSpawnDelegate(x => {});

            switch (overload)
            {
            case RegisterPrefabOverload.Prefab_SpawnHandlerDelegate:
                NetworkClient.RegisterPrefab(prefab, spawnHandlerDelegate, unspawnHandler);
                break;

            case RegisterPrefabOverload.Prefab_SpawnHandlerDelegate_NewAssetId:
                NetworkClient.RegisterPrefab(prefab, anotherGuid, spawnHandlerDelegate, unspawnHandler);
                break;

            case RegisterPrefabOverload.Prefab:
            case RegisterPrefabOverload.Prefab_NewAssetId:
            case RegisterPrefabOverload.Prefab_SpawnDelegate:
            case RegisterPrefabOverload.Prefab_SpawnDelegate_NewAssetId:
                Debug.LogError("Overload did not have SpawnHandlerDelegate parameter");
                break;

            default:
                Debug.LogError("Overload not found");
                break;
            }
        }
Пример #3
0
        protected void CallRegisterPrefab(GameObject prefab, RegisterPrefabOverload overload, UnSpawnDelegate unspawnHandler)
        {
            SpawnDelegate        spawnHandler         = new SpawnDelegate((x, y) => null);
            SpawnHandlerDelegate spawnHandlerDelegate = new SpawnHandlerDelegate(x => null);

            switch (overload)
            {
            case RegisterPrefabOverload.Prefab_SpawnDelegate:
                ClientScene.RegisterPrefab(prefab, spawnHandler, unspawnHandler);
                break;

            case RegisterPrefabOverload.Prefab_SpawnDelegate_NewAssetId:
                ClientScene.RegisterPrefab(prefab, anotherGuid, spawnHandler, unspawnHandler);
                break;

            case RegisterPrefabOverload.Prefab_SpawnHandlerDelegate:
                ClientScene.RegisterPrefab(prefab, spawnHandlerDelegate, unspawnHandler);
                break;

            case RegisterPrefabOverload.Prefab_SpawnHandlerDelegate_NewAssetId:
                ClientScene.RegisterPrefab(prefab, anotherGuid, spawnHandlerDelegate, unspawnHandler);
                break;

            case RegisterPrefabOverload.Prefab:
            case RegisterPrefabOverload.Prefab_NewAssetId:
                Debug.LogError("Overload did not have UnSpawnDelegate parameter");
                break;

            default:
                Debug.LogError("Overload not found");
                break;
            }
        }
        public void ErrorForNullPrefab(RegisterPrefabOverload overload)
        {
            string msg = OverloadWithHandler(overload)
                ? "Could not register handler for prefab because the prefab was null"
                : "Could not register prefab because it was null";

            LogAssert.Expect(LogType.Error, msg);
            CallRegisterPrefab(null, overload);
        }
        public void ErrorForPrefabWithoutNetworkIdentity(RegisterPrefabOverload overload)
        {
            string msg = OverloadWithHandler(overload)
                ? $"Could not register handler for '{invalidPrefab.name}' since it contains no NetworkIdentity component"
                : $"Could not register '{invalidPrefab.name}' since it contains no NetworkIdentity component";

            LogAssert.Expect(LogType.Error, msg);
            CallRegisterPrefab(invalidPrefab, overload);
        }
        public void Prefab_AddsPrefabToDictionary(RegisterPrefabOverload overload)
        {
            Guid guid = GuidForOverload(overload);

            CallRegisterPrefab(validPrefab, overload);

            Assert.IsTrue(NetworkClient.prefabs.ContainsKey(guid));
            Assert.AreEqual(NetworkClient.prefabs[guid], validPrefab);
        }
        public void Prefab_WarningForAssetIdAlreadyExistingInPrefabsDictionary(RegisterPrefabOverload overload)
        {
            Guid guid = GuidForOverload(overload);

            NetworkClient.prefabs.Add(guid, validPrefab);

            LogAssert.Expect(LogType.Warning, $"Replacing existing prefab with assetId '{guid}'. Old prefab '{validPrefab.name}', New prefab '{validPrefab.name}'");
            CallRegisterPrefab(validPrefab, overload);
        }
        public void Handler_AddsUnSpawnHandlerToDictionaryForRuntimeObject(RegisterPrefabOverload overload)
        {
            // create a scene object
            CreateNetworked(out GameObject runtimeObject, out _);

            //test
            CallRegisterPrefab(runtimeObject, overload);
            Assert.IsTrue(NetworkClient.unspawnHandlers.ContainsKey(anotherGuid));
        }
        public void Handler_ErrorForAssetIdAlreadyExistingInPrefabsDictionary(RegisterPrefabOverload overload)
        {
            Guid guid = GuidForOverload(overload);

            NetworkClient.prefabs.Add(guid, validPrefab);

            LogAssert.Expect(LogType.Error, $"assetId '{guid}' is already used by prefab '{validPrefab.name}', unregister the prefab first before trying to add handler");
            CallRegisterPrefab(validPrefab, overload);
        }
        public void NewGuid_ErrorForEmptyGuid(RegisterPrefabOverload overload)
        {
            string msg = OverloadWithHandler(overload)
                ? $"Could not register handler for '{validPrefab.name}' with new assetId because the new assetId was empty"
                : $"Could not register '{validPrefab.name}' with new assetId because the new assetId was empty";

            LogAssert.Expect(LogType.Error, msg);
            CallRegisterPrefab(validPrefab, overload, new Guid());
        }
        public void PrefabNewGuid_NoErrorWhenNewAssetIdIsSameAsCurrentPrefab(RegisterPrefabOverload overload)
        {
            Guid guid = validPrefabGuid;

            CallRegisterPrefab(validPrefab, overload, guid);

            Assert.IsTrue(NetworkClient.prefabs.ContainsKey(guid));

            NetworkIdentity netId = validPrefab.GetComponent <NetworkIdentity>();

            Assert.AreEqual(netId.assetId, validPrefabGuid);
        }
        public void Handler_AddsSpawnHandlerToDictionaryForRuntimeObject(RegisterPrefabOverload overload)
        {
            // create a scene object
            CreateNetworked(out GameObject runtimeObject, out NetworkIdentity networkIdentity);

            Debug.Assert(networkIdentity.sceneId == 0, "SceneId was not set to 0");
            Debug.Assert(runtimeObject.GetComponent <NetworkIdentity>().sceneId == 0, "SceneId was not set to 0");

            //test
            CallRegisterPrefab(runtimeObject, overload);
            Assert.IsTrue(NetworkClient.spawnHandlers.ContainsKey(anotherGuid));
        }
        public void PrefabNewGuid_ErrorDoesNotChangePrefabsAssetId(RegisterPrefabOverload overload)
        {
            Guid guid = anotherGuid;

            LogAssert.Expect(LogType.Error, $"Could not register '{validPrefab.name}' to {guid} because it already had an AssetId, Existing assetId {validPrefabGuid}");
            CallRegisterPrefab(validPrefab, overload);

            Assert.IsFalse(NetworkClient.prefabs.ContainsKey(guid));

            NetworkIdentity netId = validPrefab.GetComponent <NetworkIdentity>();

            Assert.AreEqual(netId.assetId, validPrefabGuid);
        }
        public void Handler_AddsUnSpawnHandlerToDictionaryForRuntimeObject(RegisterPrefabOverload overload)
        {
            // setup
            CreateSceneObject(out GameObject runtimeObject, out NetworkIdentity networkIdentity);

            //test
            CallRegisterPrefab(runtimeObject, overload);

            Assert.IsTrue(unspawnHandlers.ContainsKey(anotherGuid));

            // teardown
            GameObject.DestroyImmediate(runtimeObject);
        }
        public void ErrorForEmptyGuid(RegisterPrefabOverload overload)
        {
            // create a scene object
            CreateNetworked(out GameObject runtimeObject, out _);

            //test
            string msg = OverloadWithHandler(overload)
               ? $"Can not Register handler for '{runtimeObject.name}' because it had empty assetid. If this is a scene Object use RegisterSpawnHandler instead"
               : $"Can not Register '{runtimeObject.name}' because it had empty assetid. If this is a scene Object use RegisterSpawnHandler instead";

            LogAssert.Expect(LogType.Error, msg);
            CallRegisterPrefab(runtimeObject, overload);
        }
        public void PrefabNewGuid_AddsRuntimeObjectToDictionary(RegisterPrefabOverload overload)
        {
            // create a scene object
            CreateNetworked(out GameObject runtimeObject, out NetworkIdentity networkIdentity);

            //test
            CallRegisterPrefab(runtimeObject, overload);

            Assert.IsTrue(NetworkClient.prefabs.ContainsKey(anotherGuid));
            Assert.AreEqual(NetworkClient.prefabs[anotherGuid], runtimeObject);

            Assert.AreEqual(networkIdentity.assetId, anotherGuid);
        }
        public void NewGuid_ChangePrefabsAssetId(RegisterPrefabOverload overload)
        {
            Guid guid = anotherGuid;

            CallRegisterPrefab(validPrefab, overload);

            Assert.IsTrue(prefabs.ContainsKey(guid));
            Assert.AreEqual(prefabs[guid], validPrefab);

            NetworkIdentity netId = prefabs[guid].GetComponent <NetworkIdentity>();

            Assert.AreEqual(netId.assetId, guid);
        }
        public void ErrorIfPrefabHadSceneId(RegisterPrefabOverload overload)
        {
            GameObject      clone = GameObject.Instantiate(validPrefab);
            NetworkIdentity netId = clone.GetComponent <NetworkIdentity>();

            // Scene Id needs to not be zero for this test
            netId.sceneId = 20;

            LogAssert.Expect(LogType.Error, $"Can not Register '{clone.name}' because it has a sceneId, make sure you are passing in the original prefab and not an instance in the scene.");
            CallRegisterPrefab(clone, overload);

            GameObject.DestroyImmediate(clone);
        }
        public void WarningForAssetIdAlreadyExistingInHandlersDictionary(RegisterPrefabOverload overload)
        {
            Guid guid = GuidForOverload(overload);

            NetworkClient.spawnHandlers.Add(guid, x => null);
            NetworkClient.unspawnHandlers.Add(guid, x => {});

            string msg = OverloadWithHandler(overload)
                ? $"Replacing existing spawnHandlers for prefab '{validPrefab.name}' with assetId '{guid}'"
                : $"Adding prefab '{validPrefab.name}' with assetId '{guid}' when spawnHandlers with same assetId already exists.";

            LogAssert.Expect(LogType.Warning, msg);
            CallRegisterPrefab(validPrefab, overload);
        }
        public void PrefabNewGuid_AddsRuntimeObjectToDictionary(RegisterPrefabOverload overload)
        {
            // setup
            CreateSceneObject(out GameObject runtimeObject, out NetworkIdentity networkIdentity);

            //test
            CallRegisterPrefab(runtimeObject, overload);

            Assert.IsTrue(prefabs.ContainsKey(anotherGuid));
            Assert.AreEqual(prefabs[anotherGuid], runtimeObject);

            Assert.AreEqual(networkIdentity.assetId, anotherGuid);

            // teardown
            GameObject.DestroyImmediate(runtimeObject);
        }
        public void ErrorForEmptyGuid(RegisterPrefabOverload overload)
        {
            // setup
            CreateSceneObject(out GameObject runtimeObject, out NetworkIdentity networkIdentity);

            //test
            string msg = OverloadWithHandler(overload)
               ? $"Can not Register handler for '{runtimeObject.name}' because it had empty assetid. If this is a scene Object use RegisterSpawnHandler instead"
               : $"Can not Register '{runtimeObject.name}' because it had empty assetid. If this is a scene Object use RegisterSpawnHandler instead";

            LogAssert.Expect(LogType.Error, msg);
            CallRegisterPrefab(runtimeObject, overload);

            // teardown
            GameObject.DestroyImmediate(runtimeObject);
        }
        public void Handler_AddsSpawnHandlerToDictionaryForRuntimeObject(RegisterPrefabOverload overload)
        {
            // setup
            CreateSceneObject(out GameObject runtimeObject, out NetworkIdentity networkIdentity);

            Debug.Assert(networkIdentity.sceneId == 0, "SceneId was not set to 0");
            Debug.Assert(runtimeObject.GetComponent <NetworkIdentity>().sceneId == 0, "SceneId was not set to 0");

            //test
            CallRegisterPrefab(runtimeObject, overload);

            Assert.IsTrue(spawnHandlers.ContainsKey(anotherGuid));

            // teardown
            GameObject.DestroyImmediate(runtimeObject);
        }
        public void SpawnDelegate_AddsHandlerToSpawnHandlers(RegisterPrefabOverload overload)
        {
            int handlerCalled = 0;

            Guid          guid    = GuidForOverload(overload);
            SpawnDelegate handler = new SpawnDelegate((pos, rot) =>
            {
                handlerCalled++;
                return(null);
            });

            CallRegisterPrefab(validPrefab, overload, handler);


            Assert.IsTrue(NetworkClient.spawnHandlers.ContainsKey(guid));

            // check spawnHandler above is called
            SpawnHandlerDelegate handlerInDictionary = NetworkClient.spawnHandlers[guid];

            handlerInDictionary.Invoke(default);
Пример #24
0
 protected static bool OverloadWithHandler(RegisterPrefabOverload overload)
 {
     return((overload & RegisterPrefabOverload.WithHandler) != 0);
 }
Пример #25
0
 protected static bool OverloadWithAssetId(RegisterPrefabOverload overload)
 {
     return((overload & RegisterPrefabOverload.WithAssetId) != 0);
 }
Пример #26
0
 public void CheckOverloadWithHandler(RegisterPrefabOverload overload, bool expected)
 {
     // test to make sure OverloadWithHandler correctly works with flags
     Assert.That(OverloadWithHandler(overload), Is.EqualTo(expected));
 }
Пример #27
0
 protected Guid GuidForOverload(RegisterPrefabOverload overload) => OverloadWithAssetId(overload) ? anotherGuid : validPrefabGuid;
 public void ErrorForNetworkIdentityInChildren(RegisterPrefabOverload overload)
 {
     LogAssert.Expect(LogType.Error, $"Prefab '{prefabWithChildren.name}' has multiple NetworkIdentity components. There should only be one NetworkIdentity on a prefab, and it must be on the root object.");
     CallRegisterPrefab(prefabWithChildren, overload);
 }