private async void RemoteInstantiate( short jobId, short objNameStringId, Vector3 position, Quaternion rotation, object[] data, PhotonMessageInfo info) { // this logic must be executed on the master client if (PhotonNetwork.IsMasterClient) { string objName = await NetworkedStringManager.GetString(objNameStringId); GameObject result = MasterSceneNetworkInstantiate(objName, position, rotation, data); PhotonView photonViewOnResult = result?.GetComponent <PhotonView>(); int resultPhotonViewId = 0; if (photonViewOnResult != null) { resultPhotonViewId = photonViewOnResult.ViewID; photonViewOnResult.TransferOwnership(info.Sender); } photonView.RPC("RemoteInstantiationFinished", RpcTarget.Others, info.Sender.ActorNumber, jobId, resultPhotonViewId ); } }
/// <summary> /// Sends the current configuration of the visualizer to the other clients /// </summary> private async void SendConfiguration() { short ownerId = await NetworkedStringManager.StringToId(visualizer.Owner); short repositoryId = await NetworkedStringManager.StringToId(visualizer.Repository); photonView.RPC("SetConfiguration", RpcTarget.Others, ownerId, repositoryId); }
private async void SetConfiguration(short ownerId, short repositoryId) { string owner = await NetworkedStringManager.GetString(ownerId); string repository = await NetworkedStringManager.GetString(repositoryId); visualizer.Owner = owner; visualizer.Repository = repository; visualizer.UpdateView(); }
private async void ChatMessageReceived(short textId, PhotonMessageInfo messageInfo) { string text = await NetworkedStringManager.GetString(textId); ChatMessageEventArgs args = new ChatMessageEventArgs(text, messageInfo.Sender); if (RecordMessages) { ChatMessages.Add(args); } MessageReceived?.Invoke(this, args); }
private async void CallMasterForInstantiation(GameObject obj, Vector3 position, Quaternion rotation, Action <GameObject> resultCallback, object[] data = null) { // create a remote instantiation job short jobId = instantiationJobId; instanatiationJobCallbacks.Add(jobId, resultCallback); instantiationJobId++; short objNameStringId = await NetworkedStringManager.StringToId(obj.name); photonView.RPC("RemoteInstantiate", RpcTarget.MasterClient, // consider sending to all clients in order to account for master client switches jobId, objNameStringId, position, rotation, data ); }
public async void SendChatMessage(string text) { short textId = await NetworkedStringManager.StringToId(text); photonView.RPC("ChatMessageReceived", RpcTarget.All, textId); }