Пример #1
0
        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();
        }