コード例 #1
0
        /// <summary>
        /// Creates a new instance with all entries sorted by 'DistanceToViewerSquared'
        /// </summary>
        /// <returns></returns>
        public RoomObjectList CloneAndSortByDistanceToViewerSquared()
        {
            RoomObjectList list = new RoomObjectList(this.Capacity);

            list.SortByDistanceToViewerSquared();
            list.AddRange(this);

            return(list);
        }
コード例 #2
0
        /// <summary>
        /// Returns list with contained items flagged as Enemy, GuildMate or Friend.
        /// </summary>
        /// <returns></returns>
        public RoomObjectList GetItemsByPVPFlags()
        {
            RoomObjectList list = new RoomObjectList();

            foreach (RoomObject entry in this)
            {
                if (entry.Flags.IsEnemy ||
                    entry.Flags.IsGuildMate ||
                    entry.Flags.IsFriend)
                {
                    list.Add(entry);
                }
            }

            return(list);
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="BaseRenderTypes"></param>
        /// <returns></returns>
        public RoomObjectList GetItemsByBaseRenderTypes(byte[] BaseRenderTypes)
        {
            RoomObjectList list = new RoomObjectList(this.Capacity);

            foreach (RoomObject entry in this)
            {
                foreach (BaseRenderType brt in BaseRenderTypes)
                {
                    switch (brt)
                    {
                    case BaseRenderType.CREATURE:
                        if (entry.Flags.IsCreature)
                        {
                            list.Add(entry);
                        }
                        break;

                    case BaseRenderType.PLAYER:
                        if (entry.Flags.IsPlayer)
                        {
                            list.Add(entry);
                        }
                        break;

                    case BaseRenderType.ITEM:
                        if (entry.Flags.IsGettable)
                        {
                            list.Add(entry);
                        }
                        break;

                    case BaseRenderType.NPC:
                        if (entry.Flags.IsBuyable)
                        {
                            list.Add(entry);
                        }
                        break;
                    }
                }
            }
            return(list);
        }
コード例 #4
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="Source"></param>
        public RoomObjectListFiltered(RoomObjectList Source)
        {
            // keep reference to source list
            source = Source;

            // set capacity to source
            Capacity = source.Capacity;

            // setup default filter (flags 0 = all items)
            FlagsFilter       = new List <ObjectFlags>();
            PlayerTypesFilter = new List <ObjectFlags.PlayerType>();

            // this filtered list is always name sorted
            SortByName();

            // add existing items
            foreach (RoomObject obj in source)
            {
                TryAdd(obj);
            }

            // hookup observing
            source.ListChanged += OnSourceListChanged;
        }