private void StartClient() { TankInputModule.Instance.Init(state => Send(Env.ServerName, state)); for (var i = 0; i < 15; i++) { Send(i + "." + Env.ServerName, new JoinEvent()); } _client.OnMessage += (src, data) => UnityMainThreadDispatcher.Instance().Enqueue(() => { Env.ServerName = src; switch (GetMessageType(data)) { case MessageType.InitialTankStates: Debug.Log(src); Debug.Log(_tanks); goto case MessageType.TankStates; case MessageType.TankStates: var tanks = TankStates.FromByteArray(data); for (var i = 0; i < tanks.States.Length; i++) { var state = tanks.States[i]; TankManager tank; if (tanks.Type == MessageType.InitialTankStates) { tank = AddTank(state.publicKey); if (state.publicKey.Equals(_publicKey)) { HUDController.Instance.InitHudPlayer(tank.Health); tank.Follow(); } } else { tank = _tanksList[i]; } if (state.respawned) { tank.Respawn( new Vector3(state.moveX, 0, state.moveY), new Vector3(0, state.rotation.Value, 0) ); } else { tank.SetDesiredMovementPosition(new Vector2(state.moveX, state.moveY)); } tank.SetDesiredFirePosition(new Vector3(state.fireX, 0, state.fireY)); tank.SetFireIsHeld(state.fire); } break; case MessageType.ChatMessage: var message = ChatMessage.FromByteArray(data); UIChat.ShowMessage(message.Message); break; case MessageType.JoinEvent: throw new ArgumentOutOfRangeException(); case MessageType.MovementState: throw new ArgumentOutOfRangeException(); default: throw new ArgumentOutOfRangeException(); } }); }