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