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 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()); }