private void _handle_msg(MessageFactory.GameMsg gameMsg) { if (gameMsg.selfID == 0) { var msg = gameMsg.msg; int inner_msg_type = BitConverter.ToInt32(msg, 0); switch (inner_msg_type) { case ProtoSettings.MSG_PLAYER_SCORE: int score = BitConverter.ToInt32(msg, 4); int killer_id = BitConverter.ToInt32(msg, 8); int dead_id = BitConverter.ToInt32(msg, 12); int killer_len = BitConverter.ToInt32(msg, 16); int dead_len = BitConverter.ToInt32(msg, 20); String killer_name = System.Text.Encoding.Default.GetString(msg, 24, killer_len); String dead_name = System.Text.Encoding.Default.GetString(msg, 24 + killer_len, dead_len); if (killer_id == selfID) { stateMgr.score = score; } stateMgr.contentQueue.Enqueue(killer_name + " killed " + dead_name + ", get 1 score."); var obj = id2obj[dead_id]; obj.GetComponent <PlayerMotor>().OtherDie(); break; } } else if (id2obj.ContainsKey(gameMsg.selfID)) { GameObject obj = id2obj[gameMsg.selfID]; if (gameMsg.selfID == selfID) { obj.GetComponent <PlayerMotorSelf>().HandleMsg(gameMsg.msg); } else { obj.GetComponent <PlayerMotor>().HandleMsg(gameMsg.msg); } } else { Debug.Log("new player show up"); if (gameMsg.selfID == selfID) { var player = GameObject.Find("SelfPlayer/Graphics/player"); id2obj[gameMsg.selfID] = player; player.GetComponent <PlayerMotorSelf>().playerID = gameMsg.selfID; player.GetComponent <PlayerMotorSelf>().HandleMsg(gameMsg.msg); } else { GameObject PlayerPrefab = Resources.Load("Prefabs/Player") as GameObject; GameObject Player = Instantiate(PlayerPrefab); var player = Player.transform.Find("Graphics/otherPlayer").gameObject; id2obj[gameMsg.selfID] = player; player.GetComponent <PlayerMotor>().playerID = gameMsg.selfID; player.GetComponent <PlayerMotor>().HandleMsg(gameMsg.msg); } } }
void FixedUpdate() { if (gameStatus <= 0) { return; } if (gameStatus == 2) //reconnect { roomID = reconnectInfo.roomID; stateMgr.HP = reconnectInfo.hp; stateMgr.gunBullet = reconnectInfo.gun; stateMgr.bagBullet = reconnectInfo.bag; stateMgr.score = reconnectInfo.score; var player = GameObject.Find("SelfPlayer/Graphics/player"); id2obj[selfID] = player; player.GetComponent <PlayerMotorSelf>().playerID = selfID; player.GetComponent <PlayerMotorSelf>().logicPosition = reconnectInfo.position; gameStatus = 1; } frameID += 1; byte[] msg_with_headers = new byte[0]; client.readSocket(ref msg_with_headers); if (msg_with_headers.Length < 20) { return; } Debug.Log(BitConverter.ToString(msg_with_headers)); int begin = 0; while (begin < msg_with_headers.Length) { MessageFactory.GameMsg gameMsg = new MessageFactory.GameMsg(msg_with_headers, begin); if (gameMsg.frameID > 0) { queue.Enqueue(gameMsg); } begin += gameMsg.Length; } while (queue.Count > 0) { var _gameMsg = queue.Peek() as MessageFactory.GameMsg; if (_gameMsg.frameID + 5 <= frameID) { _handle_msg(_gameMsg); queue.Dequeue(); } else { break; } } }