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