// 誰かがルームにログインしたときの処理 public void OnOtherPlayerConnected(MonobitPlayer newPlayer) { if (!vcPlayerInfo.ContainsKey(newPlayer)) { vcPlayerInfo.Add(newPlayer, (Int32)EnableVC.ENABLE); } }
// 誰かがルームからログアウトしたときの処理 public virtual void OnOtherPlayerDisconnected(MonobitPlayer otherPlayer) { if (vcPlayerInfo.ContainsKey(otherPlayer)) { vcPlayerInfo.Remove(otherPlayer); } }
public void OnHostChanged(MonobitPlayer newHost) { // 新しくホストになったプレイヤーが自分で無ければ処理は不要 if (!MonobitNetwork.isHost) { return; } // ホストに変更があったのでプレイヤーの情報を更新する int length = m_PlayerInfos.Length; for (int i = 0; i < length; ++i) { PlayerInfoGUI plyaerInfo = m_PlayerInfos[i].GetComponent <PlayerInfoGUI>(); plyaerInfo.InfoUpdate(); } Hashtable playerCustomParam = MonobitNetwork.player.customParameters; playerCustomParam["ready"] = true; MonobitNetwork.SetPlayerCustomParameters(playerCustomParam); string startButtonText = MonobitNetwork.isHost ? "Start" : "Ready"; m_Start.transform.Find("Text").GetComponent <Text>().text = startButtonText; }
public void Set(MonobitPlayer player) { m_Player = player; ID = m_Player.ID; IsEntry = true; InfoUpdate(); }
public void Clear() { m_Player = null; m_PlayerInfoText.text = "No Entry"; ID = int.MaxValue; IsEntry = false; }
/// <summary>他プレイヤーが入室してきた際に呼ばれるコールバック</summary> /// <param name="newPlayer">入室してきたプレイヤーの情報</param> void OnOtherPlayerConnected(MonobitPlayer newPlayer) { if (MonobitNetwork.isHost) { Debug.Log($"Time Remaining: {newPlayer.name}"); this.gameRuleMonobitView.RPC(nameof(this.SetRemainTime), newPlayer, this.timeRemaining); } }
void GetRawTextureDataRPC(MonobitPlayer requestSender) { byte[] rawTextureData = texture.EncodeToPNG(); int width = texture.width; int height = texture.height; int dataSize = rawTextureData.Length; int viewId = this.monobitView.viewID; Debug.Log("*************************"); Debug.Log(" GetRawTextureDataRPC"); Debug.Log(" RPC sender: " + requestSender.ID); Debug.Log(" Texture size: " + width + "x" + height + " = " + width * height + "px"); Debug.Log(" RawTextureData: " + rawTextureData.Length + "bytes"); Debug.Log("*************************"); StreamTextureDataToRequestSender(rawTextureData, width, height, dataSize, viewId, requestSender); }
public void OnMonobitPlayerParametersChanged(object[] playerAndUpdatedParameters) { MonobitPlayer monobitPlayer = (MonobitPlayer)playerAndUpdatedParameters[0]; Hashtable playerParams = (Hashtable)playerAndUpdatedParameters[1]; int length = m_PlayerInfos.Length; for (int i = 0; i < length; ++i) { PlayerInfoGUI plyaerInfo = m_PlayerInfos[i].GetComponent <PlayerInfoGUI>(); if (plyaerInfo.ID != monobitPlayer.ID) { continue; } plyaerInfo.InfoUpdate(); break; } }
void StreamTextureDataToRequestSender(byte[] rawTextureData, int width, int height, int dataSize, int viewId, MonobitPlayer targetPlayer) { Debug.Log("***********************************"); Debug.Log(" StreamTextureDataToRequestSender "); Debug.Log("***********************************"); // Send info int[] textureInfo = new int[4]; textureInfo[0] = viewId; textureInfo[1] = width; textureInfo[2] = height; textureInfo[3] = dataSize; monobitView.RPC("OnReceivedTextureInfo", targetPlayer, textureInfo); // Send raw data rawTextureData.ToObservable() .Buffer(bytePerMessage) .Subscribe(byteSubList => { byte[] sendData = new byte[byteSubList.Count]; byteSubList.CopyTo(sendData, 0); monobitView.RPC("OnReceivedRawTextureDataStream", targetPlayer, sendData); }); }
/// <summary>他プレイヤーが退室した際に呼ばれるコールバック</summary> /// <param name="otherPlayer">退室したプレイヤーの情報</param> private void OnOtherPlayerDisconnected(MonobitPlayer otherPlayer) { Debug.Log($"Disconected player: {otherPlayer.name}"); }
/// <summary>他プレイヤーが入室してきた際に呼ばれるコールバック</summary> /// <param name="newPlayer">入室してきたプレイヤーの情報</param> private void OnOtherPlayerConnected(MonobitPlayer newPlayer) { Debug.Log($"Connected new player: {newPlayer.name}"); }
/** * 統括設定. * * @param bPrefab プレハブかどうかのフラグ */ private void GeneralSettings(bool bPrefab) { GUILayout.Space(5); // 標題の表示 EditorGUILayout.LabelField("General Settings", EditorStyles.boldLabel); EditorGUI.indentLevel = 2; // MonobitView ID の表示 if (bPrefab) { EditorGUILayout.LabelField("MonobitView ID", "Decide at runtime"); if (0 != m_View.viewID) { m_View.viewID = 0; } } else if (EditorApplication.isPlaying) { EditorGUILayout.LabelField("MonobitView ID", m_View.viewID.ToString()); } else { // MonobitView ID の手動登録 int viewID = (int)EditorGUILayout.IntField("MonobitView ID", m_View.viewID); if (viewID != m_View.viewID) { MonobitView.RemoveSceneViewID(m_View.viewID); m_View.viewID = MonobitView.AssignedSceneViewID(viewID); m_ViewIdOverlapped = MonobitView.OverlappedSceneViewID(viewID); } // MonobitView ID の退避 m_ViewID = m_View.viewID; // シーン内のオブジェクトでIDが重複している場合、警告を促す if (m_ViewIdOverlapped) { EditorGUILayout.HelpBox("This \"MonobitView ID\" is stored in another object.", MessageType.Warning, true); } // 登録されたIDが不正である場合、エラーを出力する if (m_View.viewID < 0 || m_View.viewID >= MonobitNetwork.PERSONAL_VIEW_ID_MAX) { EditorGUILayout.HelpBox("This \"MonobitView ID\" doesn't allowed as this value (must between 0 to 999).", MessageType.Error, true); } } // Owner の表示 if (bPrefab) { EditorGUILayout.LabelField("Owner", "Decide at runtime"); } else if (m_View.isSceneView) { EditorGUILayout.LabelField("Owner", "Scene(HostClient)"); } else { MonobitPlayer player = MonobitPlayer.Find(m_View.ownerId); string playerInfo = (player != null) ? player.name : "<MonobitPlayer is not found>"; if (string.IsNullOrEmpty(playerInfo)) { playerInfo = "<playername is not set>"; } EditorGUILayout.LabelField("Owner", "[" + m_View.ownerId + "]" + playerInfo); } // Ownerの所有権委譲の設定 GUI.enabled = !EditorApplication.isPlaying; m_View.ownershipTransfer = (MonobitEngineBase.OwnershipOption)EditorGUILayout.EnumPopup("Ownership Transfer", m_View.ownershipTransfer); GUI.enabled = true; // 制御権の表示 if (EditorApplication.isPlaying && MonobitNetwork.player != null) { EditorGUILayout.Toggle("Enable Control" + (MonobitNetwork.isHost ? " <master>" : ""), m_View.isMine); } else { GUI.enabled = false; EditorGUILayout.Toggle("Enable Control", true); GUI.enabled = true; } // 暗号化の有効/無効フラグ m_View.Encrypt = EditorGUILayout.Toggle("Enable Sync Encrypt Network", m_View.Encrypt); // 所有者がルーム退室時にオブジェクトを削除するかどうか if (m_View.isInstantiated) { GUI.enabled = false; EditorGUILayout.Toggle("Is Dont Destroy On Room", m_View.isDontDestroyOnRoom); GUI.enabled = true; } EditorGUI.indentLevel = 0; GUILayout.Space(5); }
/** * 統括設定. * * @param bPrefab プレハブかどうかのフラグ */ private void GeneralSettings(bool bPrefab) { GUILayout.Space(5); // 標題の表示 EditorGUILayout.LabelField("General Settings", EditorStyles.boldLabel); EditorGUI.indentLevel = 2; // MonobitView ID の表示 if (bPrefab) { EditorGUILayout.LabelField("MonobitView ID", "Decide at runtime"); } else if (EditorApplication.isPlaying) { EditorGUILayout.LabelField("MonobitView ID", m_View.viewID.ToString()); } else { m_View.viewID = (int)EditorGUILayout.IntField("MonobitView ID", m_View.viewID); } // Owner の表示 if (bPrefab) { EditorGUILayout.LabelField("Owner", "Decide at runtime"); } else if (m_View.isSceneView) { EditorGUILayout.LabelField("Owner", "Scene(HostClient)"); } else { MonobitPlayer player = MonobitPlayer.Find(m_View.ownerId); string playerInfo = (player != null) ? player.name : "<MonobitPlayer is not found>"; if (string.IsNullOrEmpty(playerInfo)) { playerInfo = "<playername is not set>"; } EditorGUILayout.LabelField("Owner", "[" + m_View.ownerId + "]" + playerInfo); } // Ownerの所有権委譲の設定 GUI.enabled = !EditorApplication.isPlaying; m_View.ownershipTransfer = (MonobitEngineBase.OwnershipOption)EditorGUILayout.EnumPopup("Ownership Transfer", m_View.ownershipTransfer); GUI.enabled = true; // 制御権の表示 if (EditorApplication.isPlaying && MonobitNetwork.player != null) // TODO : 「&& MonobitNetwork.player != null」 will be cleaned up. { EditorGUILayout.Toggle("Enable Control" + (MonobitNetwork.isHost ? " <master>" : ""), m_View.isMine); } else { GUI.enabled = false; EditorGUILayout.Toggle("Enable Control", true); GUI.enabled = true; } // UDP通信時のRUDP使用可否フラグ m_View.Reliable = EditorGUILayout.Toggle("Enable Sync Reliable Network(only UDP)", m_View.Reliable); // 暗号化の有効/無効フラグ m_View.Encrypt = EditorGUILayout.Toggle("Enable Sync Encrypt Network", m_View.Encrypt); EditorGUI.indentLevel = 0; GUILayout.Space(5); }