// Start is called before the first frame update
    void Start()
    {
        // 버튼 동작 리스너 연결
        buttonBack.onClick.AddListener(() => { OnClickBack(); });
        buttonTap.onClick.AddListener(() => { OnClickTap(); });
        buttonGameEnd.onClick.AddListener(() => { OnClickGameEnd(); });

        // ===========================================================================================>>> GameAnvil
        // 게임 유저 얻기
        tapBirdUser = ConnectHandler.Instance.GetUserAgent(Constants.GAME_SPACE_NAME, Constants.userSubId);
        // 유저 점수 동기 처리
        tapBirdUser.AddListener((UserAgent userAgent, Com.Nhn.Gameanvil.Sample.Protocol.BroadcastTapBirdMsg msg) =>
        {
            if (msg != null)
            {
                Debug.Log("BroadcastTapBirdMsg!!!!!! : " + msg);

                string roomData = null;
                foreach (var tapBirData in msg.TapBirdData)
                {
                    var nickname = tapBirData.UserData.NickName;
                    var score    = tapBirData.UserData.Score;

                    roomData += nickname + " :: " + score + "\n";
                }

                textUserTapInfo.text = roomData;
            }
        }
                                );
        // ===========================================================================================>>> GameAnvil

        UpdateMyInfo(tapCount);
    }
    void OnEnable()
    {
        TapController.OnPlayerDied        += OnPlayerDied;
        TapController.OnPlayerScored      += OnPlayerScored;
        CountdownText.OnCountdownFinished += OnCountdownFinished;

        if (UserInfo.Instance.IsMulti)
        {
            // ===========================================================================================>>> GameAnvil
            tapBirdGameUser.AddListener((UserAgent userAgent, Com.Nhn.Gameanvil.Sample.Protocol.BroadcastTapBirdMsg msg) =>
            {
                if (msg != null)
                {
                    string roomData = "";
                    Dictionary <string, long> userDic = new Dictionary <string, long>();
                    foreach (var tapBirData in msg.TapBirdData)
                    {
                        userDic.Add(tapBirData.UserData.NickName, tapBirData.UserData.Score);
                    }
                    var sortDic = userDic.OrderByDescending(dic => dic.Value);

                    foreach (var data in sortDic)
                    {
                        roomData += data.Key + " :: " + data.Value + "\n";
                    }

                    Debug.Log("BroadcastTapBirdMsg!!!!!! : " + roomData);
                    userInfoText.text = roomData;
                }
            });
            // ===========================================================================================>>> GameAnvil
        }
    }
Ejemplo n.º 3
0
    void Start()
    {
        // ===========================================================================================>>> GameAnvil
        // 게임 유저 얻기
        snakeGameUser = ConnectHandler.Instance.GetUserAgent(Constants.GAME_SPACE_NAME, Constants.userSubId);
        // ===========================================================================================>>> GameAnvil

        // 버튼 동작 리스너 연결
        buttonBack.onClick.AddListener(() => { OnClickBack(); });
        buttonGameEnd.onClick.AddListener(() => { OnClickGameEnd(); });

        // ===========================================================================================>>> GameAnvil
        // 유저 매치 요청 타임 아웃 리스너
        snakeGameUser.onMatchUserTimeoutListeners += (UserAgent userAgent) =>
        {
            Debug.Log("onMatchUserTimeoutListeners!!!!!! " + userAgent.GetUserId());

            // 로비신으로 이동
            RemoveAllListeners();
            UserInfo.Instance.MoveScene(Constants.SCENE_LOBBY);
        };

        // 사용자가 방을 나갈때 처리 되는 리스너 - 서버에서 강제로 내보내는 처리
        snakeGameUser.onLeaveRoomListeners += (UserAgent userAgent, ResultCodeLeaveRoom result, bool force, int roomId, Payload payload) =>
        {
            Debug.Log("onLeaveRoomListeners!!!!!! " + userAgent.GetUserId() + "isForce : " + force);
            // 게임 나가기
            OnLeaveRoom(Com.Nhn.Gameanvil.Sample.Protocol.EndType.GameEndTimeUp);
        };

        snakeGameUser.AddListener((UserAgent userAgent, Com.Nhn.Gameanvil.Sample.Protocol.SnakeFoodMsg msg) =>
        {
            if (msg != null)
            {
                Debug.Log("<<<< SnakeFoodMsg!!!!!! : " + msg);


                if (msg.IsDelete)
                {
                    foreach (var currentFood in SnakeGameInfo.Instance.FoodList)
                    {
                        if (msg.FoodData.Idx == currentFood.transform.position.z)
                        {
                            Debug.Log("Delete Food !!!!! : " + currentFood.transform.position.z + ":" + currentFood.transform.position.x + ", " + currentFood.transform.position.y);
                            Destroy(currentFood);
                            SnakeGameInfo.Instance.FoodList.Remove(currentFood);
                            break;
                        }
                    }
                }
                else
                {
                    textFoodList.text = msg.FoodData.ToString();
                }
            }
        });
        // ===========================================================================================>>> GameAnvil
    }
Ejemplo n.º 4
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 Start()
    {
        // 버튼 동작 리스너 연결
        backButton.onClick.AddListener(() => { OnClickGameEnd(); });

        SetBoarderActive(false);

        enemySnake = new List <GameObject>();

        playerScoreText.text = UserInfo.Instance.Nickname + " : 0";

        // ===========================================================================================>>> GameAnvil
        // 유저 매치 요청 타임 아웃 리스너
        snakeGameUser.onMatchUserTimeoutListeners += (UserAgent userAgent) =>
        {
            Debug.Log("onMatchUserTimeoutListeners!!!!!! " + userAgent.GetUserId());

            // 로비신으로 이동
            RemoveAllListeners();
            UserInfo.Instance.MoveScene(Constants.SCENE_GAME_LOBBY);
        };

        // 사용자가 방을 나갈때 처리 되는 리스너 - 서버에서 강제로 내보내는 처리
        snakeGameUser.onLeaveRoomListeners += (UserAgent userAgent, ResultCodeLeaveRoom result, bool force, int roomId, Payload payload) =>
        {
            Debug.Log("onLeaveRoomListeners!!!!!! " + userAgent.GetUserId() + "isForce : " + force);
            UserInfo.Instance.gameState = UserInfo.GameState.GameOver;
        };

        // 상대편 유저 데이터 처리
        snakeGameUser.AddListener((UserAgent userAgent, Com.Nhn.Gameanvil.Sample.Protocol.SnakeUserMsg msg) =>
        {
            Debug.Log("<<<< SnakeUserMsg!!!!!! : " + msg);
            if (msg != null)
            {
                enemyScoreText.text = msg.UserData.BaseData.NickName + " : " + msg.UserData.BaseData.Score;
                if (msg.UserData.UserPositionListData != null)
                {
                    for (int i = 0; i < msg.UserData.UserPositionListData.Count; i++)
                    {
                        if (i < enemySnake.Count)
                        {
                            enemySnake[i].transform.position = new Vector3(msg.UserData.UserPositionListData[i].X, msg.UserData.UserPositionListData[i].Y, msg.UserData.UserPositionListData[i].Idx);
                        }
                        else
                        {
                            enemySnake.Add(Instantiate(enemyPrefab, new Vector3(msg.UserData.UserPositionListData[i].X, msg.UserData.UserPositionListData[i].Y, msg.UserData.UserPositionListData[i].Idx), Quaternion.identity));
                        }
                    }
                }
            }
        });

        // 서버에서 전달 받은 food 상태 처리
        snakeGameUser.AddListener((UserAgent userAgent, Com.Nhn.Gameanvil.Sample.Protocol.SnakeFoodMsg msg) =>
        {
            if (msg != null)
            {
                Debug.Log("<<<< SnakeFoodMsg!!!!!! : " + msg);


                if (msg.IsDelete)
                {
                    foreach (var currentFood in SnakeGameInfo.Instance.FoodList)
                    {
                        if (msg.FoodData.Idx == currentFood.transform.position.z)
                        {
                            Debug.Log("Delete Food !!!!! : " + currentFood.transform.position.z + ":" + currentFood.transform.position.x + ", " + currentFood.transform.position.y);
                            Destroy(currentFood);
                            SnakeGameInfo.Instance.FoodList.Remove(currentFood);
                            break;
                        }
                    }
                }
                else
                {
                    SnakeGameInfo.Instance.FoodList.Add(Instantiate(foodPrefab, new Vector3(msg.FoodData.X, msg.FoodData.Y, msg.FoodData.Idx), Quaternion.identity));
                }
            }
        });
        // ===========================================================================================>>> 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;
    }