示例#1
0
    void Start()
    {
        inputFieldNickname.text = UserInfo.Instance.Nickname;

        // 버튼 리스너 연결
        buttonNicknameChange.onClick.AddListener(() => { OnClickNicknameChange(); });
        buttonTapBirdGame.onClick.AddListener(() => { OnClickTapBirdGame(); });
        buttonMultiTapBirdGame.onClick.AddListener(() => { OnClickMultiTapBirdGame(); });
        buttonMultiSnakeGame.onClick.AddListener(() => { OnClickMultiSnakeGame(); });
        buttonSingleRanking.onClick.AddListener(() => { OnClickSingleRanking(); });
        buttonUserInfo.onClick.AddListener(() => { OnClickUserInfo(); });

        // ===========================================================================================>>> GameAnvil
        // 커넥터로 부터 유저 객체 저장
        gameUser = ConnectHandler.Instance.GetUserAgent(Constants.GAME_SPACE_NAME, Constants.userSubId);
        // ===========================================================================================>>> GameAnvil

        // 유저 게임 정보 초기화
        UserInfo.Instance.IsMulti   = false;
        UserInfo.Instance.gameState = UserInfo.GameState.None;

        // ===========================================================================================>>> GameAnvil
        // 타이밍 이슈상 리스너를 미리 등록, 유저 매치가 되었을때 불리는 리스너  : snake 게임 server to client
        gameUser.onMatchUserDoneListeners += (UserAgent userAgent, ResultCodeMatchUserDone result, bool created, int roomId, Payload payload) =>
        {
            Debug.Log("onMatchUserDoneListeners!!!!!! " + userAgent.GetUserId());
        };

        // 타이밍 이슈상 리스너 미리등록, 서버에서 게임룸에 두명이 모두 입장했을때 게임 설정데이터를 전송 : snake 게임 server to client
        gameUser.AddListener((UserAgent userAgent, Com.Nhn.Gameanvil.Sample.Protocol.SnakeGameInfoMsg msg) =>
        {
            if (msg != null)
            {
                Debug.Log("SnakeGameInfoMsg!!!!!! : " + msg);
                SnakeGameInfo.Instance.BoarderLeft   = msg.BoarderLeft;
                SnakeGameInfo.Instance.BoarderRight  = msg.BoarderRight;
                SnakeGameInfo.Instance.BoarderBottom = msg.BoarderBottom;
                SnakeGameInfo.Instance.BoarderTop    = msg.BoarderTop;

                Dictionary <string, SnakeGameUser> userMap = new Dictionary <string, SnakeGameUser>();
                foreach (var user in msg.Users)
                {
                    var snakeGameUser = new SnakeGameUser
                    {
                        Id       = user.BaseData.Id,
                        Nickname = user.BaseData.NickName,
                        Score    = user.BaseData.Score
                    };

                    List <SnakePositionInfo> snakePositionData = new List <SnakePositionInfo>();
                    foreach (var userPosition in user.UserPositionListData)
                    {
                        var positionData = new SnakePositionInfo
                        {
                            Index = userPosition.Idx,
                            X     = userPosition.X,
                            Y     = userPosition.Y
                        };
                        snakePositionData.Add(positionData);
                    }
                    snakeGameUser.PositionList = snakePositionData;
                    userMap.Add(snakeGameUser.Id, snakeGameUser);
                }

                SnakeGameInfo.Instance.UserMapInfo = userMap;
                Debug.Log("UserMapInfo Count " + userMap.Count);
                UserInfo.Instance.gameState = UserInfo.GameState.Wait;
            }
        });
        // ===========================================================================================>>> GameAnvil
    }
    void OnClickMultiSnakeStartGame()
    {
        // 다중클릭 막음
        buttonMultiSnakeStartGame.interactable = false;

        // ===========================================================================================>>> GameAnvil
        // 타이밍 이슈상 리스너를 미리 등록,  유저가 게임방에 들어 갔을때 게임 레디 flag설정
        gameUser.onMatchUserDoneListeners += (UserAgent userAgent, ResultCodeMatchUserDone result, bool created, int roomId, Payload payload) =>
        {
            Debug.Log("onMatchUserDoneListeners!!!!!! " + userAgent.GetUserId());

            if (result == ResultCodeMatchUserDone.MATCH_USER_DONE_SUCCESS)
            {
                UserInfo.Instance.gameState = UserInfo.GameState.Wait;
            }
        };

        // 타이밍 이슈상 리스너 미리등록, 서버에서 게임룸에 두명이 모두 입장했을때 게임 설정데이터를 전송
        gameUser.AddListener((UserAgent userAgent, Com.Nhn.Gameanvil.Sample.Protocol.SnakeGameInfoMsg msg) =>
        {
            if (msg != null)
            {
                Debug.Log("SnakeGameInfoMsg!!!!!! : " + msg);
                SnakeGameInfo.Instance.BoarderLeft   = msg.BoarderLeft;
                SnakeGameInfo.Instance.BoarderRight  = msg.BoarderRight;
                SnakeGameInfo.Instance.BoarderBottom = msg.BoarderBottom;
                SnakeGameInfo.Instance.BoarderTop    = msg.BoarderTop;

                Dictionary <string, SnakeGameUser> userMap = new Dictionary <string, SnakeGameUser>();
                foreach (var user in msg.Users)
                {
                    var gameUser = new SnakeGameUser
                    {
                        Id       = user.BaseData.Id,
                        Nickname = user.BaseData.NickName,
                        Score    = user.BaseData.Score
                    };

                    List <SnakePositionInfo> snakePositionData = new List <SnakePositionInfo>();
                    foreach (var userPosition in user.UserPositionListData)
                    {
                        var positionData = new SnakePositionInfo
                        {
                            Index = userPosition.Idx,
                            X     = userPosition.X,
                            Y     = userPosition.Y
                        };
                        snakePositionData.Add(positionData);
                    }
                    gameUser.PositionList = snakePositionData;
                    userMap.Add(gameUser.Id, gameUser);
                }

                SnakeGameInfo.Instance.UserMapInfo = userMap;
                Debug.Log("UserMapInfo Count " + userMap.Count);
                UserInfo.Instance.gameState = UserInfo.GameState.Wait;
            }
        });

        // 유저 매치 두명이서 방을 만들어서 동시에 입장해서 게임진행
        gameUser.MatchUserStart(Constants.SPACE_ROOM_TYPE_MULTI_USER_MATCH, "SNAKE", (UserAgent userAgent, ResultCodeMatchUserStart result, Payload payload) =>
        {
            Debug.Log("MatchUser " + result);
            if (result == ResultCodeMatchUserStart.MATCH_USER_START_SUCCESS)
            {
                SnakeGameInfo.Instance.FoodList.Clear();
                SnakeGameInfo.Instance.UserMapInfo.Clear();

                // 성공시 게임신으로 변경, 등록된 리스너 제거
                RemoveAllListeners();
                UserInfo.Instance.MoveScene(Constants.SCENE_GAME_MULTI_SNAKE);
            }
            else
            {
                // 실패 처리
            }
        });
        // ===========================================================================================>>> GameAnvil

        buttonMultiSnakeStartGame.interactable = true;
    }