protected virtual void RaiseNetworkSceneStart(NetworkSceneManager pNetworkSceneManager, Scene pScene) { if (OnNetworkSceneStart != null) { OnNetworkSceneStart(pNetworkSceneManager, pScene); } }
protected virtual void RaiseNetworkSceneFailedToBind(NetworkSceneManager pNetworkSceneManager, Scene pScene) { if (OnNetworkSceneFailedToBind != null) { OnNetworkSceneFailedToBind(pNetworkSceneManager, pScene); } }
public virtual NetworkSceneItem CreateNetworkScene(NetworkSceneTemplate pSceneTemplate, bool pIsSceneStatic, byte[] pNetworkSceneMetaData = null) { ushort port = GetPortFromSetting(pSceneTemplate.Settings); if (!pIsSceneStatic && _usedDynamicPorts.Contains(port)) { return(null); } // Check if we already have created a scene with that name NetworkSceneTemplate existingScene = FindNetworkSceneTemplate(pSceneTemplate.SceneName, false, true, true, true); if (existingScene != null) { return(null); } // Create an empty Scene and put a new NetworkSceneManager in it NetworkSceneManager manager = CreateEmptyNetworkScene(pSceneTemplate); manager.NetworkSceneMetaData = pNetworkSceneMetaData; // Create the Scene with the 'BuildIndex' and queue it up to be merged with our empty Scene NetworkSceneItem newItem = new NetworkSceneItem(pSceneTemplate, manager); if (pSceneTemplate.BuildIndex > 0) { SceneManager.LoadScene(pSceneTemplate.BuildIndex, LoadSceneMode.Additive); _pendingScenes.Add(newItem); } else { newItem.IsCreated = true; } // Add the newItem to the respective collection if (pIsSceneStatic) { _scenesStatic.Add(pSceneTemplate.SceneName, newItem); } else { _usedDynamicPorts.Add(port); _scenesDynamic.Add(pSceneTemplate.SceneName, newItem); } // If the scene is 'dynamic' we need to register it so other Nodes know the scene is taken if (_isServer && !pIsSceneStatic && _enableRegisterDynamicScenes) { RegisterDynamicScene(_registerDynamicScenesRequireConfirmation, pSceneTemplate); newItem.IsRegistered = !_registerDynamicScenesRequireConfirmation; } else { newItem.IsRegistered = true; } ReadyNetworkScene(newItem); return(newItem); }
public virtual bool TryGetNetworkSceneManager(string pSceneName, out NetworkSceneManager pNetworkSceneManager) { NetworkSceneItem item = FindNetworkSceneItem(pSceneName, true, true); if (item == null || !item.HasManager) { pNetworkSceneManager = null; return(false); } pNetworkSceneManager = item.Manager; return(true); }
public virtual NetworkSceneManager CreateEmptyNetworkScene(NetworkSceneTemplate pTemplate, NetworkBehaviorListSO pBehaviorListSO) { Scene newScene = SceneManager.CreateScene(pTemplate.SceneName); GameObject go = GameObject.Instantiate(_networkSceneManagerPrefab); go.name = newScene.name + "_NetworkSceneManager"; NetworkSceneManager manager = go.GetComponent <NetworkSceneManager>(); manager.NetworkBehaviorListSO = pBehaviorListSO; manager.Settings = pTemplate.Settings; SceneManager.MoveGameObjectToScene(go, newScene); return(manager); }
public virtual void StartAsServer(Node pNode) { _isServer = true; _currentNode = pNode; _masterNode = _nodeMapSO.nodeMap.GetMasterNode(); Disconnect(); if (_masterNode != null) { if (IsMasterNode) { _masterManager = CreateMasterNetworkScene(_currentNode, _serviceNetworkSceneBehaviorListSO); if (_masterManager != null) { _masterManager.AutoReconnect = _autoReconnectMasterManager; _masterManager.AutoReconnectInterval = _autoReconnectMasterManagerInterval; _masterManager.StartAsServer(); InstantiateServices(); } } else { _masterManager = CreateMasterNetworkScene(_masterNode, _serviceNetworkSceneBehaviorListSO); if (_masterManager != null) { _masterManager.AutoReconnect = _autoReconnectMasterManager; _masterManager.AutoReconnectInterval = _autoReconnectMasterManagerInterval; _masterManager.StartAsClient(); } } if (_masterManager == null || !_masterManager.HasNetworker || !_masterManager.Networker.IsBound) { RaiseMasterManagerFailedToBind(); } } _usedDynamicPorts.UseFreeIds = false; _usedDynamicPorts.LowerBound = _currentNode.DynamicPortMin; _usedDynamicPorts.UpperBound = _currentNode.DynamicPortMax; _usedDynamicPorts.NextIdentifier = _currentNode.DynamicPortMin; CreateNetworkScenes(_currentNode.InitWithNetworkScenes, true); }