Пример #1
0
        /**
         * ルーム作成&入室設定.
         */
        private void OnGUI_CreateAndJoinRoom()
        {
            // 任意の名称を持つルームを作成する
            if (GUILayout.Button("Create Room", GUILayout.Width(150)))
            {
                // カスタムルームパラメータから、ロビー送信パラメータを抽出(とりあえず全部送信するようにする)
                string[] customRoomParametersForLobby = new string[this.customRoomParam.Keys.Count];
                int      keyIndex = 0;
                foreach (string key in this.customRoomParam.Keys)
                {
                    customRoomParametersForLobby[keyIndex] = key;
                    keyIndex++;
                }

                RoomSettings roomSettings = new RoomSettings()
                {
                    isVisible       = this.isVisible,
                    isOpen          = true,
                    maxPlayers      = this.maxPlayers,
                    roomParameters  = this.customRoomParam,
                    lobbyParameters = customRoomParametersForLobby
                };

                MonobitNetwork.CreateRoom(null, roomSettings, null);
            }

            // カスタムルームパラメータと一致するランダム入室
            if (GUILayout.Button("Join Room", GUILayout.Width(150)))
            {
                MonobitNetwork.JoinRandomRoom(this.customRoomParam, 0);
            }
        }
Пример #2
0
        /**
         * ルーム退室時の処理.
         */
        public void OnLeftRoom()
        {
            Debug.Log("OnLeftRoom");
            this.isGameStart    = false;
            this.isSpawnMyChara = false;
            this.battleEndFrame = 60 * 60;

            if (isEnterAnotherRoom)
            {
                isEnterAnotherRoom = false;

                // 自身の値に対し、検索範囲の最初の閾値を設定する
                baseValueMin = (baseValue - baseValueIncrease < baseValueLow) ? baseValueLow : baseValue - baseValueIncrease;
                baseValueMax = (baseValue + baseValueIncrease > baseValueHigh) ? baseValueHigh : baseValue + baseValueIncrease;

                // 閾値から、クエリー検索のためのWHERE句を生成する
                string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax;

                // ルームへの入室
                MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo()
                {
                    Kind = LobbyKind.Query, Name = "QueryLobby"
                }, queryLobbyFilter);
            }
        }
Пример #3
0
        /**
         * ルーム入室設定.
         */
        private void OnGUI_JoinRoom()
        {
            // 表題
            GUILayout.Label("Join Room", new GUIStyle()
            {
                normal = new GUIStyleState()
                {
                    textColor = Color.white
                }, fontStyle = FontStyle.Bold
            });
            GUILayout.BeginHorizontal();
            GUILayout.Space(25);
            GUILayout.BeginVertical();

            // クエリー文の入力
            GUILayout.BeginHorizontal();
            GUILayout.Label("Key Values : ");
            this.keyValueFilter = GUILayout.TextField(this.keyValueFilter, GUILayout.Width(400));
            GUILayout.EndHorizontal();

            // カスタムルームパラメータと一致するランダム入室
            if (GUILayout.Button("Join Room", GUILayout.Width(150)))
            {
                MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo()
                {
                    Kind = LobbyKind.Query, Name = "QueryLobby"
                }, this.keyValueFilter);
            }

            GUILayout.EndVertical();
            GUILayout.EndHorizontal();
        }
Пример #4
0
    // GUIまわりの記述
    public void OnGUI()
    {
        // GUI用の解像度を調整する
        Vector2 guiScreenSize = new Vector2(800, 480);

        if (Screen.width > Screen.height)
        {
            // landscape
            GUIUtility.ScaleAroundPivot(new Vector2(Screen.width / guiScreenSize.x, Screen.height / guiScreenSize.y), Vector2.zero);
        }
        else
        {
            // portrait
            GUIUtility.ScaleAroundPivot(new Vector2(Screen.width / guiScreenSize.y, Screen.height / guiScreenSize.x), Vector2.zero);
        }

        if (MonobitNetwork.isConnect)
        {
            // ルーム一覧を取得
            m_RoomData = MonobitNetwork.GetRoomData();

            // ルーム一覧からボタン選択
            if (m_RoomData != null)
            {
                for (int i = 0; i < m_RoomData.Length; i++)
                {
                    if (GUILayout.Button(m_RoomData[i].name + "(" + m_RoomData[i].playerCount + ")", GUILayout.Width(100)))
                    {
                        MonobitNetwork.JoinRoom(m_RoomData[i].name);
                    }
                }
            }

            // ルーム名の入力
            this.roomName = GUILayout.TextField(this.roomName);

            // ルームの作成
            if (GUILayout.Button("Create Room", GUILayout.Width(100)))
            {
                MonobitNetwork.CreateRoom(this.roomName, new RoomSettings()
                {
                    isVisible = true, isOpen = true, maxPlayers = this.maxPlayers
                }, null);
            }

            // ルームへの入室(ランダム)
            if (GUILayout.Button("Join Room", GUILayout.Width(100)))
            {
                MonobitNetwork.JoinRandomRoom();
            }

            // メニューに戻る
            if (GUILayout.Button("Return Menu", GUILayout.Width(100)))
            {
                Application.LoadLevel("SampleMenu");
            }
        }
    }
Пример #5
0
        /**
         * ランダム入室失敗時の処理.
         */
        public void OnMonobitRandomJoinFailed(object[] parameters)
        {
            // すでにルーム入室に成功している場合、連続して処理をしないようにする
            if ((Int16)mun.STREAM.ERRORCODE_ID.RESULT_FAILURE_MASTER_ALREADY_JOINED_ROOM == (Int16)parameters[0])
            {
                return;
            }

            // 閾値が限界まで達してしまった場合、または baseValueIncreaseが0以下の場合、
            // そもそもルームが存在しなかった(あるいは検索中に消えた、検索対象がなくなった)ことになるので、エラーで抜ける。
            if (baseValueIncrease <= 0 || (baseValueMin == baseValueLow && this.baseValueMax == baseValueHigh))
            {
                Debug.Log("OnMonobitRandomJoinFailed : ErrorCode = " + parameters[0] + ", DebugMsg = " + parameters[1]);
                return;
            }

            // ランダムルーム入室のクエリー検索の閾値を広げる。
            if (Mathf.Abs(baseValueMax - baseValue) <= Math.Abs(baseValueMin - baseValue))
            {
                if ((baseValueMax + baseValueIncrease) > baseValueHigh)
                {
                    baseValueMax = baseValueHigh;
                    baseValueMin = Mathf.Max(baseValueMin - baseValueIncrease, baseValueLow);
                }
                else
                {
                    baseValueMax += baseValueIncrease;
                }
            }
            else
            {
                if ((baseValueMin - baseValueIncrease) < baseValueLow)
                {
                    baseValueMin = baseValueLow;
                    baseValueMax = Mathf.Min(baseValueMax + baseValueIncrease, baseValueHigh);
                }
                else
                {
                    baseValueMin -= baseValueIncrease;
                }
            }

            // 閾値から、クエリー検索のためのWHERE句を生成する
            string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax;

            // ルームへの入室
            MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo()
            {
                Kind = LobbyKind.Query, Name = "QueryLobby"
            }, queryLobbyFilter);
        }
Пример #6
0
        /**
         * ランダム入室失敗時の処理.
         */
        public void OnMonobitRandomJoinFailed(object[] parameters)
        {
            // 閾値が限界まで達してしまった場合、そもそもルームが存在しなかった(あるいは検索中に消えた)ことになるので、エラーで抜ける。
            if (baseValueMin == baseValueLow && this.baseValueMax == baseValueHigh)
            {
                Debug.Log("OnMonobitRandomJoinFailed : ErrorCode = " + parameters[0] + ", DebugMsg = " + parameters[1]);
                return;
            }

            // ランダムルーム入室のクエリー検索の閾値を広げる。
            if (Mathf.Abs(baseValueMax - baseValue) <= Math.Abs(baseValueMin - baseValue))
            {
                if ((baseValueMax + baseValueIncrease) > baseValueHigh)
                {
                    baseValueMax = baseValueHigh;
                    baseValueMin = Mathf.Max(baseValueMin - baseValueIncrease, baseValueLow);
                }
                else
                {
                    baseValueMax += baseValueIncrease;
                }
            }
            else
            {
                if ((baseValueMin - baseValueIncrease) < baseValueLow)
                {
                    baseValueMin = 0;
                    baseValueMax = Mathf.Min(baseValueMax + baseValueIncrease, baseValueHigh);
                }
                else
                {
                    baseValueMin -= baseValueIncrease;
                }
            }

            // 閾値から、クエリー検索のためのWHERE句を生成する
            string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax;

            // ルームへの入室
            MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo()
            {
                Kind = LobbyKind.Query, Name = "QueryLobby"
            }, queryLobbyFilter);
        }
Пример #7
0
        /**
         * @brief   オンライン&ロビー入室中のGUI表示.
         * @param   isDispInputGUI  入力系GUIを表示するかどうかのフラグ(縁取り文字描画機能を活かした場合の、多重描画を防止するため).
         * @param   state           文字表示色.
         */
        private void OnGUI_InLobby(bool isDispInputGUI, GUIStyleState state)
        {
            // ルーム作成GUIレイヤー
            {
                // Header
                GUILayout.Label("Create Room/Join Random", new GUIStyle()
                {
                    normal = state, fontSize = 18
                });
                GUILayout.BeginHorizontal();
                GUILayout.Space(25);
                GUILayout.BeginVertical();

                GUILayout.BeginHorizontal();
                {
                    // ルーム名の入力欄、および作成ボタン入力表示
                    GUILayout.Label("Input room name:", new GUIStyle()
                    {
                        normal = state, fontSize = 16, margin = new RectOffset(6, 6, 6, 6), fixedWidth = 140
                    });
                    if (isDispInputGUI)
                    {
                        this.roomName = GUILayout.TextField(this.roomName, GUILayout.Width(200));
                        if (GUILayout.Button("Create Room", GUILayout.Width(150)))
                        {
                            // 入力があった場合、指定された名前で4人部屋を生成
                            MonobitNetwork.CreateRoom(roomName, new RoomSettings()
                            {
                                isVisible = true, isOpen = true, maxPlayers = 4
                            }, null);
                        }
                    }
                    else
                    {
                        GUILayout.Space(25);
                    }
                }
                GUILayout.EndHorizontal();

                // ルームの作成ボタン入力表示
                if (isDispInputGUI)
                {
                    if (GUILayout.Button("Join Random", GUILayout.Width(150)))
                    {
                        // ランダム入室をする
                        MonobitNetwork.JoinRandomRoom();
                    }
                }
                else
                {
                    GUILayout.Space(25);
                }

                // Footer
                GUILayout.EndVertical();
                GUILayout.EndHorizontal();
            }

            // ルームリストGUIレイヤー
            {
                // ルーム一覧の取得
                RoomData[] roomList = MonobitNetwork.GetRoomData();

                // ルーム一覧が存在する場合、ルームリストを表示
                if (roomList != null)
                {
                    // Header
                    GUILayout.Label("Created Room List", new GUIStyle()
                    {
                        normal = state, fontSize = 24
                    });
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(25);
                    GUILayout.BeginVertical();

                    // ルームリストについて、1件ずつボタン入力表示
                    foreach (RoomData room in roomList)
                    {
                        if (isDispInputGUI && room.open && room.visible)
                        {
                            if (GUILayout.Button(room.name + " (" + room.playerCount + "/" + room.maxPlayers + ")", GUILayout.Width(300)))
                            {
                                MonobitNetwork.JoinRoom(room.name);
                            }
                        }
                    }

                    // Footer
                    GUILayout.EndVertical();
                    GUILayout.EndHorizontal();
                }
            }
        }
Пример #8
0
        /**
         * ルーム作成設定.
         */
        private void OnGUI_CreateOrJoinRoom()
        {
            // 値の入力
            GUILayout.BeginHorizontal();
            GUILayout.Label("Your Numeric Value(" + baseValueLow + "-" + baseValueHigh + ") : ", GUILayout.Width(200));
            baseValue = Convert.ToInt32(GUILayout.TextField(baseValue.ToString(), GUILayout.Width(50)));
            GUILayout.EndHorizontal();

            // ルーム最大人数の入力
            GUILayout.BeginHorizontal();
            GUILayout.Label("Room Max Players : ", GUILayout.Width(200));
            maxPlayers = Convert.ToByte(GUILayout.TextField(maxPlayers.ToString(), GUILayout.Width(50)));
            GUILayout.EndHorizontal();

            // ルームの作成
            if (GUILayout.Button("Create Room", GUILayout.Width(250)))
            {
                // 入力した値が範囲外の場合、入力を無視する
                if (baseValue < baseValueLow || baseValue > baseValueHigh)
                {
                    Debug.LogWarning("Your value must between" + baseValueLow + " and " + baseValueHigh);
                }
                else
                {
                    // 自身の値をクエリーパラメータとして代入
                    customRoomParam["Value"] = baseValue;

                    // ロビー抽出バラメータの設定
                    string[] customRoomParametersForLobby = { "Value" };

                    // ルームの作成
                    RoomSettings roomSettings = new RoomSettings()
                    {
                        isVisible       = true,
                        isOpen          = true,
                        maxPlayers      = this.maxPlayers,
                        roomParameters  = this.customRoomParam,
                        lobbyParameters = customRoomParametersForLobby
                    };
                    MonobitNetwork.CreateRoom(null, roomSettings, null);
                }
            }

            // ルームへの入室
            if (GUILayout.Button("Join Room", GUILayout.Width(250)))
            {
                // 入力した値が範囲外の場合、入力を無視する
                if (baseValue < baseValueLow || baseValue > baseValueHigh)
                {
                    Debug.LogWarning("Your value must between" + baseValueLow + " and " + baseValueHigh);
                }
                else
                {
                    // 自身の値に対し、検索範囲の最初の閾値を設定する
                    baseValueMin = (baseValue - baseValueIncrease < baseValueLow) ? baseValueLow : baseValue - baseValueIncrease;
                    baseValueMax = (baseValue + baseValueIncrease > baseValueHigh) ? baseValueHigh : baseValue + baseValueIncrease;

                    // 閾値から、クエリー検索のためのWHERE句を生成する
                    string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax;

                    // ルームへの入室
                    MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo()
                    {
                        Kind = LobbyKind.Query, Name = "QueryLobby"
                    }, queryLobbyFilter);
                }
            }
        }
Пример #9
0
        /**
         * ルーム内でのGUI操作.
         */
        private void OnGUI_InRoom()
        {
            // 自身のプレイヤーIDの表示
            GUILayout.Label("Your ID : " + MonobitNetwork.player.ID);

            // ルーム内に存在するプレイヤー数の表示
            GUILayout.Label("PlayerCount : " + MonobitNetwork.room.playerCount + " / " + ((MonobitNetwork.room.maxPlayers == 0) ? "-" : MonobitNetwork.room.maxPlayers.ToString()));

            // ルームの入室制限可否設定の表示
            GUILayout.Label("Room isOpen : " + MonobitNetwork.room.open);

            // ルーム作成者が入力した値
            GUILayout.Label("Room Owner Numeric Value : " + MonobitNetwork.room.customParameters["Value"]);

            // 自身が入力した値
            GUILayout.Label("My Skill Level : " + baseValue);

            // 制限時間の表示
            if (isGameStart)
            {
                GUILayout.Label("Rest Frame : " + this.battleEndFrame);
            }

            // 部屋からの離脱
            if (GUILayout.Button("Leave Room", GUILayout.Width(150)))
            {
                MonobitNetwork.LeaveRoom();
            }

            // ホストの場合
            if (MonobitNetwork.isHost)
            {
                // ゲームスタート
                if (!isGameStart && GUILayout.Button("Start Game", GUILayout.Width(150)))
                {
                    this.isGameStart = true;
                    // room.open = false;
                    monobitView.RPC("GameStart", MonobitTargets.All, null);
                }

                // バトル終了
                if (this.battleEndFrame <= 0)
                {
                    // room.open = true;

                    // 部屋から離脱する
                    monobitView.RPC("LeaveRoomAll", MonobitTargets.All, null);
                }
            }

            // 他にルームが作成されている場合
            if (MonobitNetwork.GetRoomData() != null && MonobitNetwork.GetRoomData().Length >= 1)
            {
                // 他の部屋に入室
                if (GUILayout.Button("Enter Another Room", GUILayout.Width(150)))
                {
                    // 一旦部屋から離脱する
                    MonobitNetwork.LeaveRoom();

                    // 自身の値に対し、検索範囲の最初の閾値を設定する
                    baseValueMin = (baseValue - baseValueIncrease < baseValueLow) ? baseValueLow : baseValue - baseValueIncrease;
                    baseValueMax = (baseValue + baseValueIncrease > baseValueHigh) ? baseValueHigh : baseValue + baseValueIncrease;

                    // 閾値から、クエリー検索のためのWHERE句を生成する
                    string queryLobbyFilter = "Value>=" + baseValueMin + " AND Value<=" + baseValueMax;

                    // ルームへの入室
                    MonobitNetwork.JoinRandomRoom(null, this.maxPlayers, Definitions.MatchmakingMode.SerialMatching, new LobbyInfo()
                    {
                        Kind = LobbyKind.Query, Name = "QueryLobby"
                    }, queryLobbyFilter);
                }
            }
        }
Пример #10
0
    private void OnGUI()
    {
        // デフォルトのボタンと被らないように、段下げを行なう。
        GUILayout.Space(24);

        // MUNサーバに接続している場合
        if (MonobitNetwork.isConnect)
        {
            // ボタン入力でサーバから切断&シーンリセット
            if (GUILayout.Button("Disconnect", GUILayout.Width(150)))
            {
                // サーバから切断する
                MonobitNetwork.DisconnectServer();

                // シーンをリロードする
#if UNITY_5_3_OR_NEWER || UNITY_5_3
                string sceneName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;
                UnityEngine.SceneManagement.SceneManager.LoadScene(sceneName);
#else
                Application.LoadLevel(Application.loadedLevelName);
#endif
            }

            // ルームに入室している場合
            if (MonobitNetwork.inRoom)
            {
                // ボタン入力でルームから退室
                if (GUILayout.Button("Leave Room", GUILayout.Width(150)))
                {
                    MonobitNetwork.LeaveRoom();
                }
            }

            // ルームに入室していない場合
            if (!MonobitNetwork.inRoom)
            {
                GUILayout.BeginHorizontal();

                // ルーム名の入力
                GUILayout.Label("RoomName : ");
                roomName = GUILayout.TextField(roomName, GUILayout.Width(200));

                // ボタン入力でルーム作成
                if (GUILayout.Button("Create Room", GUILayout.Width(150)))
                {
                    MonobitNetwork.CreateRoom(roomName);
                }

                GUILayout.EndHorizontal();

                // 現在存在するルームからランダムに入室する
                if (GUILayout.Button("Join Random Room", GUILayout.Width(200)))
                {
                    MonobitNetwork.JoinRandomRoom();
                }

                // ルーム一覧から選択式で入室する
                foreach (RoomData room in MonobitNetwork.GetRoomData())
                {
                    string strRoomInfo =
                        string.Format("{0}({1}/{2})",
                                      room.name,
                                      room.playerCount,
                                      (room.maxPlayers == 0) ? "-" : room.maxPlayers.ToString());

                    if (GUILayout.Button("Enter Room : " + strRoomInfo))
                    {
                        MonobitNetwork.JoinRoom(room.name);
                    }
                }
            }
        }
    }
 void OnJoinedLobby()
 {
     bSelectMenu = false;
     Debug.Log("OnJoinedLobby");
     MonobitNetwork.JoinRandomRoom();
 }