/// <summary> /// inform the local player to destroy offline network player /// </summary> /// <param name="_msg">Message.</param> //disconnect network player void OnUserDisconnected(SocketUDPEvent data) { /* * data.pack[0] = USER_DISCONNECTED * data.pack[1] = id (network player id) * data.pack[2] = isMasterServer */ Debug.Log("disconnect!"); if (bool.Parse(data.pack [2])) { RestartGame(); } else { if (networkPlayers [data.pack [1]] != null) { //destroy network player by your id Destroy(networkPlayers [data.pack [1]].gameObject); //remove from the dictionary networkPlayers.Remove(data.pack [1]); } } }
public void OnThrowDone(SocketUDPEvent data) { GameObject player = GameObject.Find(myId); player.GetComponent <PlayerManager>().canThrow = false; //now sending msg to all client to show card on screen int rmvCrdNo = 0; int rmIdex = 0; //now delet the card from hand //and getting card no in having cards to remove it from list too foreach (GameObject crdToRemove in gameManagerScript.havingCards) { if (crdToRemove.name == data.pack[1] && crdToRemove.tag == data.pack[2]) { Destroy(crdToRemove); Debug.Log("card removed"); rmIdex = rmvCrdNo; } rmvCrdNo++; } gameManagerScript.havingCards.RemoveAt(rmIdex); }
/// <summary> /// Raises the spawn player event. /// </summary> /// <param name="_msg">Message.</param> void OnSpawnPlayer(SocketUDPEvent data) { /* * data.pack[0] = SPAWN_PLAYER * data.pack[1] = id (network player id) * data.pack[2]= name * data.pack[3] = position.x * data.pack[4] = position.y * data.pack[5] = position.z * data.pack[6] = rotation.x * data.pack[7] = rotation.y * data.pack[8] = rotation.z * data.pack[9] = rotation.w */ if (onLogged) { bool alreadyExist = false; //verify all players to prevents copies foreach (KeyValuePair <string, PlayerManager> entry in networkPlayers) { // same id found ,already exist!!! if (entry.Value.id == data.pack [1]) { alreadyExist = true; } } if (!alreadyExist) { Debug.Log("creating a new player"); PlayerManager newPlayer; // newPlayer = GameObject.Instantiate( network player avatar or model, spawn position, spawn rotation) newPlayer = GameObject.Instantiate(networkPlayerPrefabs [0], new Vector3(float.Parse(data.pack[3]), float.Parse(data.pack[4]), float.Parse(data.pack[5])), Quaternion.identity).GetComponent <PlayerManager> (); //it is not the local player newPlayer.isLocalPlayer = false; //network player online in the arena newPlayer.isOnline = true; //set the network player 3D text with his name newPlayer.gameObject.name = data.pack [1]; //puts the local player on the list networkPlayers [data.pack [1]] = newPlayer; //setting player pos newPlayer.gameObject.transform.position = spawnPoints[crntSpwnPlrNo].transform.position; crntSpwnPlrNo++; } } }
private void OnJoinGame(SocketUDPEvent data) { /* * data.pack[0]= CALLBACK_NAME: "JOIN_SUCCESS" * data.pack[1]= msg */ Debug.Log("有人加入房间"); }
private void OnPongMsg(SocketUDPEvent data) { /* * data.pack[0]= CALLBACK_NAME: "PONG" * data.pack[1]= "pong." */ Debug.Log("收到服务器创建成功的消息,receive pong"); serverFound = true; MainSceneCanvasMg.instance.ShowAlertDialog("有服务器运行了"); }
/// <summary> /// 接收服务器的创建消息 /// receives an answer of the server. /// from void OnReceivePing(string [] pack,IPEndPoint anyIP ) in server /// </summary> public void OnPrintPongMsg(SocketUDPEvent data) { /* * data.pack[0]= CALLBACK_NAME: "PONG" * data.pack[1]= "pong!!!!" */ Debug.Log("收到服务器创建成功的消息,receive pong"); serverFound = true; //arrow the located text in the inferior part of the game screen TicTacCanvasManager.instance.txtSearchServerStatus.text = "------- server is running -------"; }
/// <summary> /// receives an answer of the server. /// from void OnReceivePing(string [] pack,IPEndPoint anyIP ) in server /// </summary> public void OnPrintPongMsg(SocketUDPEvent data) { /* * data.pack[0]= CALLBACK_NAME: "PONG" * data.pack[1]= "pong!!!!" */ serverFound = true; contTimes = 0; //arrow the located text in the inferior part of the game screen CanvasManager.instance.txtSearchServerStatus.text = "------- server is running -------"; }
/// <summary> /// 服务器广播的结束游戏方法 /// get the server update that the player of this instance lost the game /// </summary> void OnGameOver(SocketUDPEvent data) { /* * data.data.pack[0] = CALLBACK_NAME: "GAME_OVER" from server * data.data.pack[1] = player_id */ // how the server message is transmitted to both players, // we should check if we are the next player to play, the loser //data.pack[1] stores the id of the player who won the match //判断此客户端是否不是赢家,重置游戏 if (!data.pack[1].Equals(myId)) { BoardManager.instance.ResetGameForLoserPlayer(); } myTurn = false; }
private void OnUserDisconnected(SocketUDPEvent data) { /* * data.pack[0]= CALLBACK_NAME: "USER_DISCONNECTED" * data.pack[1]= msg * data.pack[2]= isMasterServer */ Debug.Log("有人断开了连接"); //是否是服务器断开连接 if (bool.Parse(data.pack[2])) { RestartGame(); } else { //有一个其他房客退出 } }
/// <summary> /// Update the network player position to local player. /// </summary> /// <param name="_msg">Message.</param> void OnUpdatePosition(SocketUDPEvent data) { /* * data.pack[0] = UPDATE_MOVE * data.pack[1] = id (network player id) * data.pack[2] = position.x * data.pack[3] = position.y * data.pack[4] = position.z */ //it reduces to zero the accountant meaning that answer of the server exists to this moment contTimes = 0; if (networkPlayers [data.pack [1]] != null) { //find network player PlayerManager netPlayer = networkPlayers [data.pack [1]]; netPlayer.timeOut = 0f; } }
/// <summary> /// 游戏开始 /// Raises the start game event. /// both players receive this response from the server /// </summary> /// <param name="data">Data.</param> void OnStartGame(SocketUDPEvent data) { Debug.Log("\n game is runing...\n"); // 查看玩家棋子类型 // check if it's the first player to connect if (GetPlayerType().Equals("square")) { // define as first to play myTurn = true; TicTacCanvasManager.instance.txtHeader.text = "You are player O"; } else// if you are the second player { myTurn = false; TicTacCanvasManager.instance.txtHeader.text = "You are player X"; // load the game screen for this player only, //as the screen has already been loaded for the first player logged into the OnJoinGame method TicTacCanvasManager.instance.OpenScreen(1); //load the board for this player only BoardManager.instance.LoadBoard(); } // check if you are the first player to connect if (myTurn) { TicTacCanvasManager.instance.txtFooter.text = "您的回合"; } else { TicTacCanvasManager.instance.txtFooter.text = "对手回合"; } Debug.Log("\n game loaded...\n"); }
/// <summary> /// 服务器断开连接回调函数 /// inform the local player to destroy offline network player /// </summary> void OnUserDisconnected(SocketUDPEvent data) { /* * data.pack[0] = USER_DISCONNECTED * data.pack[1] = id (network player id) * data.pack[2] = isMasterServer */ Debug.Log("断开连接disconnect!"); //如果点开链接的客户端是服务器,此客户端重置游戏 // check if the disconnected player was the master server if (bool.Parse(data.pack[2])) { RestartGame(); } else { //? ? ? BoardManager.instance.ResetGameForWOPlayer(); myTurn = false; } }
/// <summary> /// 加入游戏房间方法 /// Raises the join game event from TictactToeServer. /// only the first player to connect gets this feedback from the server /// </summary> /// <param name="data">Data.</param> void OnJoinGame(SocketUDPEvent data) { Debug.Log("\n joining ...\n"); // open game screen only for the first player, as the second has not logged in yet //加入房间打开游戏UI面板 TicTacCanvasManager.instance.OpenScreen(1); Debug.Log("try to loading board"); //初始化棋盘 load the board only for the first player, because the second one hasn't logged in yet BoardManager.instance.LoadBoard(); // set square to the first player to connect // 应该是设置玩家棋子类型 SetPlayerType("square"); TicTacCanvasManager.instance.txtHeader.text = "You are player O"; TicTacCanvasManager.instance.txtFooter.text = "connected! \n Waiting for another player"; Debug.Log("\n first player SQUARE joined...\n"); }
/// <summary> /// 下棋更新面板 /// updates the board with information from TicTactToeServer /// </summary> void OnUpdateBoard(SocketUDPEvent data) { /* * data.data.pack[0] = CALLBACK_NAME: "UPDATE_BOARD" from server * data.data.pack[1] = 最后一步玩家id -- id of the opponent who made the last move * data.data.pack[2] = player_type * data.data.pack[3]= j * data.data.pack[4] = i */ // how the server message is transmitted to both players, // we should check if we are the next player to play, message target //data.pack[1] stores the id of the player who finished his move //如果落子玩家不是此客户端 if (!data.pack[1].Equals(myId)) { //设置棋盘落子行列值 // set row i and column j which should be updated in BoardManager BoardManager.instance.current_i = int.Parse(data.pack[3]); // set row i and column j which should be updated in BoardManager BoardManager.instance.current_j = int.Parse(data.pack[4]); //检查是什么类型的棋子落下 // check the type of cell to update O or X if (data.pack[2].Equals("square")) { BoardManager.instance.SpawnSquare(); } else { BoardManager.instance.SpawnX(); } //此客户端的回合 TicTacCanvasManager.instance.txtFooter.text = "Your move"; myTurn = true; } }
//************************ Reciving Client Data ***************// void OnSelectingSuit(SocketUDPEvent data) { gameManagerScript.showSuitPnl = true; }
public void OnGotCard(SocketUDPEvent data) { gameManagerScript.gotCard(data.pack[1], data.pack[2]); }
public void onGotChal(SocketUDPEvent data) { GameObject player = GameObject.Find(myId); player.GetComponent <PlayerManager>().canChal = true; }
public void OnShowCard(SocketUDPEvent data) { gameManagerScript.showCardOnGround(int.Parse(data.pack[1]), data.pack[2], data.pack[3]); }
public void OnSetChalSuit(SocketUDPEvent data) { gameManagerScript.currntChalSuit = data.pack[1]; }
public void OnGotThrow(SocketUDPEvent data) { GameObject player = GameObject.Find(myId); player.GetComponent <PlayerManager>().canThrow = true; }
void OnSuitSelected(SocketUDPEvent data) { gameManagerScript.colorSuit = data.pack[1]; gameManagerScript.hideSuitPnl = true; }
/// <summary> /// Joins the local player in game. /// </summary> /// <param name="_data">Data.</param> public void OnJoinGame(SocketUDPEvent data) { /* * data.data.pack[0] = CALLBACK_NAME: "JOIN_SUCCESS" from server * data.data.pack[1] = id (local player id) * data.data.pack[2]= name (local player name) * data.data.pack[3] = position.x (local player position x) * data.data.pack[4] = position.y (local player position ...) * data.data.pack[5] = position.z * data. data.pack[6] = rotation.x * data.data.pack[7] = rotation.y * data.data.pack[8] = rotation.z * data.data.pack[9] = rotation.w */ Debug.Log("Login successful, joining game"); if (!myPlayer) { // take a look in PlayerManager.cs script PlayerManager newPlayer; if (UDPServer.instance.serverRunning) { // newPlayer = GameObject.Instantiate( local player avatar or model, spawn position, spawn rotation) newPlayer = GameObject.Instantiate(localPlayersPrefabs [0], new Vector3(float.Parse(data.pack[3], CultureInfo.CurrentCulture), float.Parse(data.pack[4], CultureInfo.CurrentCulture), float.Parse(data.pack[5], CultureInfo.CurrentCulture)), Quaternion.identity).GetComponent <PlayerManager> (); } else { // newPlayer = GameObject.Instantiate( local player avatar or model, spawn position, spawn rotation) newPlayer = GameObject.Instantiate(localPlayersPrefabs [0], new Vector3(float.Parse(data.pack[3], CultureInfo.InvariantCulture), float.Parse(data.pack[4], CultureInfo.InvariantCulture), float.Parse(data.pack[5], CultureInfo.InvariantCulture)), Quaternion.identity).GetComponent <PlayerManager> (); } Debug.Log("player instantiated"); newPlayer.id = data.pack [1]; //this is local player newPlayer.isLocalPlayer = true; //now local player online in the arena newPlayer.isOnline = true; //set local player's 3D text with his name newPlayer.SetPlayerName(data.pack[2]); //puts the local player on the list networkPlayers [data.pack [1]] = newPlayer; myPlayer = networkPlayers [data.pack[1]].gameObject; local_player_id = data.pack [1]; //spawn cam camRig = GameObject.Instantiate(camRigPref, new Vector3(0f, 0f, -10f), Quaternion.identity); //hide the lobby menu (the input field and join buton) CanvasManager.instance.OpenScreen(3); CanvasManager.instance.CloseLoadingImg(); CanvasManager.instance.lobbyCamera.GetComponent <Camera> ().enabled = false; gameIsRunning = true; CanvasManager.instance.CloseLoadingImg(); //take a look in public IEnumerator WaitAnswer() tryJoinServer = false; // the local player now is logged onLogged = true; Debug.Log("player in game"); newPlayer.gameObject.name = data.pack[1]; //setting player pos newPlayer.gameObject.transform.position = spawnPoints[crntSpwnPlrNo].transform.position; crntSpwnPlrNo++; } }