示例#1
0
 // 誰かがルームにログインしたときの処理
 public void OnOtherPlayerConnected(MonobitPlayer newPlayer)
 {
     if (!vcPlayerInfo.ContainsKey(newPlayer))
     {
         vcPlayerInfo.Add(newPlayer, (Int32)EnableVC.ENABLE);
     }
 }
示例#2
0
 // 誰かがルームからログアウトしたときの処理
 public virtual void OnOtherPlayerDisconnected(MonobitPlayer otherPlayer)
 {
     if (vcPlayerInfo.ContainsKey(otherPlayer))
     {
         vcPlayerInfo.Remove(otherPlayer);
     }
 }
示例#3
0
    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;
    }
示例#4
0
 public void Set(MonobitPlayer player)
 {
     m_Player = player;
     ID       = m_Player.ID;
     IsEntry  = true;
     InfoUpdate();
 }
示例#5
0
 public void Clear()
 {
     m_Player = null;
     m_PlayerInfoText.text = "No Entry";
     ID      = int.MaxValue;
     IsEntry = false;
 }
示例#6
0
 /// <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);
     }
 }
示例#7
0
        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);
        }
示例#8
0
    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;
        }
    }
示例#9
0
        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);
            });
        }
示例#10
0
 /// <summary>他プレイヤーが退室した際に呼ばれるコールバック</summary>
 /// <param name="otherPlayer">退室したプレイヤーの情報</param>
 private void OnOtherPlayerDisconnected(MonobitPlayer otherPlayer)
 {
     Debug.Log($"Disconected player: {otherPlayer.name}");
 }
示例#11
0
 /// <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);
        }