コード例 #1
0
        /// <summary>
        /// </summary>
        /// <param name="userId"></param>
        public void PurgeUserMessagesBroken(int userId)
        {
            lock (DrawableChatMessages)
                lock (ContentContainer.Animations)
                {
                    for (var i = DrawableChatMessages.Count - 1; i >= 0; i--)
                    {
                        var msg = DrawableChatMessages[i];

                        if (msg.Message.Sender.OnlineUser.Id != userId)
                        {
                            continue;
                        }

                        RemoveContainedDrawable(msg);
                        DrawableChatMessages.Remove(msg);

                        TotalMessageHeight -= msg.Height;
                        PoolStartingIndex--;

                        if (PoolStartingIndex <= 0)
                        {
                            PoolStartingIndex = 0;
                        }
                    }

                    for (var i = 0; i < DrawableChatMessages.Count; i++)
                    {
                        var msg = DrawableChatMessages[i];

                        if (i == 0)
                        {
                            msg.Y = 0;
                            continue;
                        }

                        msg.Y = DrawableChatMessages[i - 1].Y + DrawableChatMessages[i - 1].Height;
                    }

                    if (TotalMessageHeight > Overlay.MessageContainer.Height - Overlay.CurrentTopicContainer.Height)
                    {
                        ContentContainer.Height = TotalMessageHeight;
                    }
                    else
                    {
                        ContentContainer.Height = Overlay.MessageContainer.Height - Overlay.CurrentTopicContainer.Height;
                    }

                    ContentContainer.ClearAnimations();
                    ContentContainer.Y        = -ContentContainer.Height;
                    PreviousContentContainerY = -ContentContainer.Height;
                    TargetY         = -ContentContainer.Height;
                    PreviousTargetY = -ContentContainer.Height;

                    for (var i = 0; i < DrawableChatMessages.Count; i++)
                    {
                        if (i >= DrawableChatMessages.Count)
                        {
                            break;
                        }

                        var msg = DrawableChatMessages[i];

                        if (i >= PoolStartingIndex)
                        {
                            if (msg.Parent != ContentContainer)
                            {
                                AddContainedDrawable(msg);
                            }
                        }
                        else
                        {
                            if (msg.Parent == ContentContainer)
                            {
                                RemoveContainedDrawable(msg);
                            }
                        }
                    }
                }
        }
コード例 #2
0
        /// <summary>
        ///     Filters games in the queue by the search options
        /// </summary>
        /// <param name="search"></param>
        /// <param name="handleAnimations"></param>
        public void FilterGames(string search, bool handleAnimations)
        {
            if (OnlineManager.MultiplayerGames.Count == 0)
            {
                return;
            }

            lock (OnlineManager.MultiplayerGames)
            {
                var games = OnlineManager.MultiplayerGames.Values.ToList();

                if (!string.IsNullOrEmpty(search))
                {
                    games = OnlineManager.MultiplayerGames.Values.ToList().FindAll(x =>
                                                                                   x.Name.ToLower().Contains(search.ToLower()) ||
                                                                                   x.Map.ToLower().Contains(search.ToLower()));
                }

                games = games.FindAll(x =>
                {
                    if (!ConfigManager.LobbyFilterHasPassword.Value && x.HasPassword)
                    {
                        return(false);
                    }

                    if (!ConfigManager.LobbyFilterFullGame.Value && x.Players.Count == x.MaxPlayers)
                    {
                        return(false);
                    }

                    // TODO: This
                    if (ConfigManager.LobbyFilterHasFriends.Value)
                    {
                        return(false);
                    }

                    var found = true;

                    if (ConfigManager.LobbyFilterOwnsMap.Value)
                    {
                        found = false;

                        foreach (var set in MapManager.Mapsets)
                        {
                            foreach (var map in set.Maps)
                            {
                                if (x.MapMd5 == map.Md5Checksum)
                                {
                                    return(true);
                                }
                            }
                        }
                    }

                    return(found);
                });

                foreach (var t in AvailableItems)
                {
                    var drawable = Pool.Find(x => x.Item.Id == t.Id);

                    if (drawable != null)
                    {
                        var index = games.FindIndex(x => x.Id == drawable.Item.Id);

                        if (index != -1)
                        {
                            if (drawable.Parent != ContentContainer)
                            {
                                if (handleAnimations)
                                {
                                    drawable.X = -drawable.Width;
                                    drawable.MoveToX(0, Easing.OutQuint, 600);
                                    drawable.Y = (PoolStartingIndex + index) * drawable.HEIGHT;
                                }

                                AddContainedDrawable(drawable);
                            }
                            else
                            {
                                if (handleAnimations)
                                {
                                    drawable.MoveToY((PoolStartingIndex + index) * drawable.HEIGHT, Easing.OutQuint, 600);
                                }
                                else
                                {
                                    drawable.Y = (PoolStartingIndex + index) * drawable.HEIGHT;
                                }
                            }

                            drawable.Index = index;
                        }
                        else
                        {
                            if (drawable.Parent == ContentContainer)
                            {
                                RemoveContainedDrawable(drawable);
                            }
                        }
                    }
                }

                // Resize the container
                if (ContentContainer.Children.Count == 0)
                {
                    ContentContainer.Height = Height;
                }
                else
                {
                    var totalUserHeight = Pool.First().Height *ContentContainer.Children.Count;
                    ContentContainer.Height = totalUserHeight > Height ? totalUserHeight : Height;
                }

                ContentContainer.ClearAnimations();
                ContentContainer.Y = 0;
                PreviousTargetY    = 0;
                TargetY            = 0;
            }
        }