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); } }
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; }