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