private void ReceivedPlayerDisconnectedMsg(NetIncomingMessage msg)
        {
            Player disconnected = GetPlayer(msg.ReadInt32());

            if (disconnected == null)
            {
                return;
            }

            players.Remove(disconnected);

            if (GameWindowState == WindowState.IN_LOBBY)
            {
                UpdateLobbyPlayers();
                CheckAllPlayersReady();
            }
            else
            {
                if (GameType == Gametype.TOURNAMENT_GAME && !disconnected.IsActivePlayer())
                {
                    FloatingTextMgr.AddFloatingText(String.Format(Strings.Culture, Strings.game_other_left, disconnected.Data.Name),
                                                    new Vector(SharedDef.VIEW_PORT_SIZE.Width / 2, SharedDef.VIEW_PORT_SIZE.Height / 2 - 50),
                                                    FloatingTextManager.TIME_LENGTH_5, FloatingTextType.SYSTEM, FloatingTextManager.SIZE_MEDIUM, true);
                }

                if (disconnected.IsActivePlayer())
                {
                    EndGame(disconnected, GameEnd.LEFT_GAME);
                }
                else if (disconnected.Device != null)
                {
                    disconnected.Device.DoRemoveMe();
                }
            }
        }
        private void ReceivedAllPlayerDataMsg(NetIncomingMessage msg)
        {
            int        playerCount = msg.ReadInt32();
            List <int> newPlrs     = new List <int>(playerCount);

            for (int i = 0; i < playerCount; ++i)
            {
                Player plr = GetPlayer(msg.ReadInt32());
                // jeste hrace nezname
                if (plr == null)
                {
                    plr = CreatePlayer();
                    players.Add(plr);

                    plr.Data.ReadObject(msg);
                    plr.Statistics.ReadObject(msg);

                    if (plr.Data.PlayerType == PlayerType.BOT)
                    {
                        CreateAndAddBot(plr);
                    }
                    else
                    {
                        FloatingTextMgr.AddFloatingText(String.Format(Strings.Culture, Strings.game_joined, plr.Data.Name),
                                                        new Vector(SharedDef.VIEW_PORT_SIZE.Width / 2, SharedDef.VIEW_PORT_SIZE.Height / 2 - 50),
                                                        FloatingTextManager.TIME_LENGTH_5, FloatingTextType.SYSTEM, FloatingTextManager.SIZE_MEDIUM, true);
                    }
                }
                else
                {
                    // hrace uz zname, ale mohl se zmenit jeho stav na active a take se mohly zmenit dalsi player data
                    plr.Data.ReadObject(msg);
                    plr.Statistics.ReadObject(msg);
                }

                newPlrs.Add(plr.GetId());
            }

            // pokud mame navic nejake stare hrace, tak je odstranime
            if (playerCount != newPlrs.Count)
            {
                for (int i = 0; i < players.Count; ++i)
                {
                    if (!newPlrs.Contains(players[i].GetId()))
                    {
                        players.RemoveAt(i);
                    }
                }
            }

            if ((GameType != Gametype.TOURNAMENT_GAME || gameRunning) && !currentPlayer.Data.StartReady)
            {
                SendStartGameRequest();
            }
            else if (GameWindowState == WindowState.IN_LOBBY)
            {
                CheckAllPlayersReady();
                UpdateLobbyPlayers();
            }
        }
        private void ReceivedSpectatorActionStarted(NetIncomingMessage msg)
        {
            Player owner = GetPlayer(msg.ReadInt32());
            String name  = msg.ReadString();

            FloatingTextMgr.AddFloatingText(String.Format(Strings.Culture, Strings.game_spectator_used, owner.Data.Name, name),
                                            owner.Device.Position, FloatingTextManager.TIME_LENGTH_4, FloatingTextType.SYSTEM, FloatingTextManager.SIZE_MEDIUM);
        }
        private void ReceiveObjectsDamage(NetIncomingMessage msg)
        {
            Player owner = GetPlayer(msg.ReadInt32());
            int    count = msg.ReadInt32();
            int    dmg   = msg.ReadInt32();

            IDestroyable obj;

            for (int i = 0; i < count; i++)
            {
                obj = GetSceneObject(msg.ReadInt64()) as IDestroyable;

                if (obj != null)
                {
                    obj.TakeDamage(dmg, owner.Device);
                    FloatingTextMgr.AddFloatingText(dmg, obj.Position, FloatingTextManager.TIME_LENGTH_3, FloatingTextType.DAMAGE);
                }
            }
        }
        private void ReceiveObjectsHeal(NetIncomingMessage msg)
        {
            Player owner = GetPlayer(msg.ReadInt32());
            int    count = msg.ReadInt32();
            int    dmg   = msg.ReadInt32();

            IDestroyable obj;

            for (int i = 0; i < count; i++)
            {
                obj = GetSceneObject(msg.ReadInt64()) as IDestroyable;

                if (obj != null)
                {
                    obj.TakeDamage(-dmg, owner.Device);
                    FloatingTextMgr.AddFloatingText(String.Format(Strings.Culture, Strings.char_plus_and_val, dmg), obj.Position, FloatingTextManager.TIME_LENGTH_3, FloatingTextType.HEAL);
                }
            }
        }
 private void ReceivedFloatingTextMsg(NetIncomingMessage msg)
 {
     FloatingTextMgr.AddFloatingText(msg.ReadString(), msg.ReadVector(), msg.ReadFloat(), (FloatingTextType)msg.ReadByte(), msg.ReadFloat(), true, false);
 }