void Update()
    {
        // 유저 매치가 되면 게임 패널 On
        if (transform.Find("PanelWait").gameObject.activeSelf&& UserInfo.Instance.gameState == UserInfo.GameState.Wait)
        {
            transform.Find("PanelWait").gameObject.SetActive(false);

            borderLeft.position   = new Vector3(SnakeGameInfo.Instance.BoarderLeft, 0, 0);
            borderRight.position  = new Vector3(SnakeGameInfo.Instance.BoarderRight, 0, 0);
            borderBottom.position = new Vector3(0, SnakeGameInfo.Instance.BoarderBottom, 0);
            borderTop.position    = new Vector3(0, SnakeGameInfo.Instance.BoarderTop, 0);

            SetBoarderActive(true);

            // 유저 위치들 설정
            foreach (var snakeGameUser in SnakeGameInfo.Instance.UserMapInfo.Values)
            {
                if (UserInfo.Instance.Uuid.Equals(snakeGameUser.Id))
                {
                    Instantiate(userPrefab, new Vector2(snakeGameUser.PositionList[0].X, snakeGameUser.PositionList[0].Y), Quaternion.identity);
                }
                else
                {
                    if (enemySnake.Count == 0)
                    {
                        enemySnake.Add(Instantiate(enemyPrefab, new Vector2(snakeGameUser.PositionList[0].X, snakeGameUser.PositionList[0].Y), Quaternion.identity));
                    }
                }
            }

            UserInfo.Instance.gameState = UserInfo.GameState.Start;
        }

        if (playerInfo == null)
        {
            playerInfo = SnakeGameInfo.Instance.GetSnakeGameUser(UserInfo.Instance.Uuid);
        }
        else
        {
            playerScoreText.text = playerInfo.Nickname + " : " + playerInfo.Score;
        }

        if (SnakeGameInfo.Instance.FoodList != null)
        {
            foodText.text = "Food Count : " + SnakeGameInfo.Instance.FoodList.Count;
        }

        if (UserInfo.Instance.gameState == UserInfo.GameState.GameOver)
        {
            transform.Find("PanelGameEnd").gameObject.SetActive(true);
        }
    }
예제 #2
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;
    }