void update_creature_list() { CreatureList.BeginUpdate(); List <ICreature> creatures = new List <ICreature>(); List <Creature> all_creatures = Session.Creatures; foreach (ICreature c in all_creatures) { creatures.Add(c); } if (Session.Project != null) { foreach (ICreature c in Session.Project.CustomCreatures) { creatures.Add(c); } foreach (ICreature c in Session.Project.NPCs) { creatures.Add(c); } } BinarySearchTree <string> categories = new BinarySearchTree <string>(); foreach (ICreature c in creatures) { if (c.Category != "") { categories.Add(c.Category); } } List <string> cats = categories.SortedList; cats.Insert(0, "Custom Creatures"); cats.Insert(1, "NPCs"); cats.Add("Miscellaneous Creatures"); CreatureList.Groups.Clear(); foreach (string cat in cats) { CreatureList.Groups.Add(cat, cat); } CreatureList.ShowGroups = true; List <ListViewItem> item_list = new List <ListViewItem>(); foreach (ICreature c in creatures) { if (c == null) { continue; } Difficulty diff; if (!FilterPanel.AllowItem(c, out diff)) { continue; } ListViewItem lvi = new ListViewItem(c.Name); lvi.SubItems.Add(c.Info); lvi.Tag = c; if (c.Category != "") { lvi.Group = CreatureList.Groups[c.Category]; } else { lvi.Group = CreatureList.Groups["Miscellaneous Creatures"]; } item_list.Add(lvi); } CreatureList.Items.Clear(); CreatureList.Items.AddRange(item_list.ToArray()); if (CreatureList.Items.Count == 0) { CreatureList.ShowGroups = false; ListViewItem lvi = CreatureList.Items.Add("(no creatures)"); lvi.ForeColor = SystemColors.GrayText; } CreatureList.EndUpdate(); }