protected virtual void OnInstantiateInNode_ServerClient(RpcArgs pArgs) { byte[] data = pArgs.GetNext <byte[]>(); RPCServiceCallback callbackRPC = data.ByteArrayToObject <RPCServiceCallback>(); NetworkBehavior behavior; if (NodeManager.IsInitialized) { RPCInstantiateInNode instantiateInNodeRPC = callbackRPC.data.ByteArrayToObject <RPCInstantiateInNode>(); behavior = NodeManager.Instance.InstantiateInScene(instantiateInNodeRPC.sceneName, instantiateInNodeRPC.createCode, null, instantiateInNodeRPC.position.ToVector3(), instantiateInNodeRPC.rotation.ToQuaternion(), instantiateInNodeRPC.sendTransform); if (behavior != null) { IRPCSerializable behaviorData = behavior as IRPCSerializable; if (behaviorData != null && instantiateInNodeRPC.behaviorData != null) { behaviorData.FromByteArray(instantiateInNodeRPC.behaviorData); } } } else { behavior = null; } callbackRPC.state = (behavior != null) ? ServiceCallbackStateEnum.RESPONSE_SUCCESS : ServiceCallbackStateEnum.RESPONSE_FAILED; callbackRPC.data = null; networkObject.SendRpc(RPC_RELAY_CONFIRM_INSTANTIATE_IN_NODE, Receivers.Server, callbackRPC.ObjectToByteArray()); }
public virtual void SetIRPCSerializable(INetworkBehavior pNetworkBehavior, IRPCSerializable pBehaviorData) { if (pNetworkBehavior == null || pBehaviorData == null) { return; } IRPCSerializable rpcSerializable = pNetworkBehavior as IRPCSerializable; if (rpcSerializable == null) { return; } rpcSerializable.FromByteArray(pBehaviorData.ToByteArray()); }
public virtual NetworkBehavior InstantiateNetworkBehavior(int pCreateCode = -1, IRPCSerializable pBehaviorData = null, Vector3?pPosition = null, Quaternion?pRotation = null, bool pSendTransform = true) { GameObject prefab = _networkBehaviorListSO.behaviorList.GetByCreateCode(pCreateCode); if (prefab == null) { return(null); } var go = Instantiate(prefab); var netBehavior = go.GetComponent <NetworkBehavior>(); NetworkObject obj = null; if (!pSendTransform && pPosition == null && pRotation == null) { obj = netBehavior.CreateNetworkObject(_networker, pCreateCode); } else { _tmpMetadata.Clear(); if (pPosition == null && pRotation == null) { byte transformFlags = 0x1 | 0x2; ObjectMapper.Instance.MapBytes(_tmpMetadata, transformFlags); ObjectMapper.Instance.MapBytes(_tmpMetadata, go.transform.position, go.transform.rotation); } else { byte transformFlags = 0x0; transformFlags |= (byte)(pPosition != null ? 0x1 : 0x0); transformFlags |= (byte)(pRotation != null ? 0x2 : 0x0); ObjectMapper.Instance.MapBytes(_tmpMetadata, transformFlags); if (pPosition != null) { ObjectMapper.Instance.MapBytes(_tmpMetadata, pPosition.Value); } if (pRotation != null) { ObjectMapper.Instance.MapBytes(_tmpMetadata, pRotation.Value); } } obj = netBehavior.CreateNetworkObject(_networker, pCreateCode, _tmpMetadata.CompressBytes()); } SetINetworkSceneObject(netBehavior, obj); SetIRPCSerializable(netBehavior, pBehaviorData); FinalizeInitialization(go, netBehavior, obj, pPosition, pRotation, pSendTransform); return(netBehavior); }
public virtual NetworkBehavior InstantiateNetworkBehavior(string pName, IRPCSerializable pBehaviorData = null, Vector3?pPosition = null, Quaternion?pRotation = null, bool pSendTransform = true) { return(InstantiateNetworkBehavior(_networkBehaviorListSO.behaviorList.GetCreateCodeFromName(pName), pBehaviorData, pPosition, pRotation, pSendTransform)); }
public static ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum> InstantiateInNode(uint pSourceNodeId, uint pTargetNodeId, string pSceneName, int pCreateCode, IRPCSerializable pBehaviorData, Vector3?pPosition, Quaternion?pRotation, bool pSendTransform) { ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum> callback = new ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum>(0, pSourceNodeId, GameTime.fixedTime); if (!IsInitialized) { callback.State = ServiceCallbackStateEnum.ERROR_SERVICE_NOT_INITIALIZED; return(callback); } if (Instance.Manager == null || !Instance.Manager.HasNetworker || !Instance.Manager.Networker.IsConnected) { callback.State = ServiceCallbackStateEnum.ERROR_NO_CONNECTION; return(callback); } RPCInstantiateInNode requestData = new RPCInstantiateInNode() { targetNodeId = pTargetNodeId, sceneName = pSceneName, createCode = pCreateCode, sendTransform = pSendTransform }; if (pBehaviorData != null) { requestData.behaviorData = pBehaviorData.ToByteArray(); } if (pPosition != null) { requestData.position = pPosition.Value.ToRPC(); } if (pRotation != null) { requestData.rotation = pRotation.Value.ToRPC(); } callback.RequestDataOfT = requestData; callback.State = ServiceCallbackStateEnum.AWAITING_RESPONSE; Instance.AddPendingServiceCallback(callback); MainThreadManager.Run(() => { if (!IsInitialized || Instance.networkObject == null) { return; } Instance.networkObject.SendRpc(RPC_RELAY_INSTANTIATE_IN_NODE, Receivers.Server, callback.ToByteArray()); }); return(callback); }
public virtual ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum> InstantiateInNode(uint pSourceNodeId, uint pTargetNodeId, string pSceneName, int pCreateCode = -1, IRPCSerializable pBehaviorData = null, Vector3?pPosition = null, Quaternion?pRotation = null, bool pSendTransform = true) { return(NodeService.InstantiateInNode(pSourceNodeId, pTargetNodeId, pSceneName, pCreateCode, pBehaviorData, pPosition, pRotation, pSendTransform)); }
public virtual ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum> InstantiateInNode(uint pSourceNodeId, uint pTargetNodeId, string pSceneName, string pNetworkBehaviorName, IRPCSerializable pBehaviorData = null, Vector3?pPosition = null, Quaternion?pRotation = null, bool pSendTransform = true) { return(InstantiateInNode(pSourceNodeId, pTargetNodeId, pSceneName, _networkSceneBehaviorListSO.behaviorList.GetCreateCodeFromName(pNetworkBehaviorName), pBehaviorData, pPosition, pRotation, pSendTransform)); }
public virtual NetworkBehavior InstantiateInScene(string pSceneName, int pCreateCode = -1, IRPCSerializable pBehaviorData = null, Vector3?pPosition = null, Quaternion?pRotation = null, bool pSendTransform = true) { NetworkSceneItem item = FindNetworkSceneItem(pSceneName, true, true); if (item == null || !item.HasManager) { return(null); } return(item.Manager.InstantiateNetworkBehavior(pCreateCode, pBehaviorData, pPosition, pRotation, pSendTransform)); }