public virtual void AddPendingObject(GameObject pGameObject) { if (pGameObject.scene.name != gameObject.scene.name) { return; } NetworkBehavior behavior = pGameObject.GetComponent <NetworkBehavior>(); if (behavior == null) { return; } INetworkSceneObject networkSceneObject = behavior as INetworkSceneObject; if (networkSceneObject == null) { return; } uint networkId = networkSceneObject.GetNetworkId(); if (_pendingObjects.ContainsKey(networkId)) { return; } _pendingObjects.Add(networkId, behavior); }
public virtual void InstantiatePendingObject(NodeNetworkSceneTemplate pNodeTemplate, NetworkBehavior pBehavior) { if (pNodeTemplate == null || pBehavior == null) { return; } INetworkSceneObject networkSceneObject = pBehavior as INetworkSceneObject; NetworkObject nObj = networkSceneObject.GetNetworkObject(); if (nObj == null) { return; } if (pNodeTemplate.NodeId == NodeManager.Instance.CurrentNode.NodeId) { NetworkBehavior behavior = NodeManager.Instance.InstantiateInScene(pNodeTemplate.SceneName, nObj.CreateCode, (pBehavior as IRPCSerializable), _teleportTarget.position, _teleportTarget.rotation); if (behavior == null) { return; } pBehavior.gameObject.SetActive(false); SendNetworkSceneToPlayer(networkSceneObject, pNodeTemplate); DestroyPendingObject(networkSceneObject); } else { ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum> callback = NodeManager.Instance.InstantiateInNode(pNodeTemplate.NodeId, pNodeTemplate.SceneName, nObj.CreateCode, (pBehavior as IRPCSerializable), _teleportTarget.position, _teleportTarget.rotation); if (callback.State == ServiceCallbackStateEnum.AWAITING_RESPONSE) { // While the request is progressing this NetworkSceneTeleporter could have been destroyed. NetworkSceneTeleporter tmpTeleporter = this; callback.OnResponseOfT += (pResponseTime, pResponseDataOfT, pSender) => { if (tmpTeleporter == null || pBehavior == null || networkSceneObject == null || pNodeTemplate == null) { return; } if (pResponseDataOfT == ServiceCallbackStateEnum.RESPONSE_SUCCESS) { pBehavior.gameObject.SetActive(false); tmpTeleporter.SendNetworkSceneToPlayer(networkSceneObject, pNodeTemplate); tmpTeleporter.DestroyPendingObject(networkSceneObject); } }; } } }
public virtual bool SendNetworkSceneToPlayer(INetworkSceneObject pNetworkSceneObject, NodeNetworkSceneTemplate pNodeTemplate) { if (pNetworkSceneObject == null || pNetworkSceneObject.Manager == null || pNodeTemplate == null) { return(false); } INetworkScenePlayer networkScenePlayer = pNetworkSceneObject as INetworkScenePlayer; if (networkScenePlayer == null) { return(false); } return(pNetworkSceneObject.Manager.ChangePlayerNetworkScene(pNodeTemplate, networkScenePlayer.Player)); }
public virtual bool DestroyPendingObject(INetworkSceneObject pNetworkSceneObject) { if (pNetworkSceneObject == null) { return(false); } NetworkObject nObj = pNetworkSceneObject.GetNetworkObject(); if (nObj == null) { return(false); } nObj.Destroy(); return(true); }
public virtual void SetINetworkSceneObject(INetworkBehavior pNetworkBehavior, NetworkObject pNetworkObject = null) { if (pNetworkBehavior == null) { return; } INetworkSceneObject nObj = pNetworkBehavior as INetworkSceneObject; if (nObj == null) { return; } nObj.Manager = this; if (pNetworkObject != null) { nObj.SetNetworkObject(pNetworkObject); } }