/// <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); } } } } }
/// <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; } }