Пример #1
0
		public IEnumerable<IEntity> Filter(IEnumerable<IEntity> entities, DynamicValueContext context)
		{
			if (ZoneAreaFilterUtils.SingleTargetToCompareArea(refDirectionTargetA, context, out Area area) && ZoneAreaFilterUtils.SingleTargetToCompareArea(refDirectionTargetB, context, out Area area2))
			{
				Direction? dirOpt = area.refCoord.GetStrictDirection4To(area2.refCoord);
				if (dirOpt.HasValue)
				{
					List<Area> applyAreas = ListPool<Area>.Get();
					applyAreas.AddRange(ZoneAreaFilterUtils.TargetsToCompareAreaList(applyStartTargets, context));
					int applyAreaCount = applyAreas.Count;
					foreach (IEntity entity in entities)
					{
						IEntityWithBoardPresence entityWithBoardPresence = entity as IEntityWithBoardPresence;
						if (entityWithBoardPresence != null)
						{
							for (int i = 0; i < applyAreaCount; i++)
							{
								Area area3 = applyAreas[i];
								if (distance.Matches(entityWithBoardPresence.area.MinDistanceWith(area3), context) && entityWithBoardPresence.area.IsAlignedWith(area3) && area3.GetStrictDirection4To(entityWithBoardPresence.area) == dirOpt)
								{
									yield return entity;
									break;
								}
							}
						}
					}
					ListPool<Area>.Release(applyAreas);
				}
			}
		}
Пример #2
0
		public IEnumerable<Coord> Filter(IEnumerable<Coord> coords, DynamicValueContext context)
		{
			if (ZoneAreaFilterUtils.SingleTargetToCompareArea(refDirectionTargetA, context, out Area area) && ZoneAreaFilterUtils.SingleTargetToCompareArea(refDirectionTargetB, context, out Area area2))
			{
				Direction? dirOpt = area.refCoord.GetStrictDirection4To(area2.refCoord);
				if (dirOpt.HasValue)
				{
					List<Area> applyAreas = ListPool<Area>.Get();
					applyAreas.AddRange(ZoneAreaFilterUtils.TargetsToCompareAreaList(applyStartTargets, context));
					int applyAreaCount = applyAreas.Count;
					foreach (Coord coord in coords)
					{
						Vector2Int val = default(Vector2Int);
						val._002Ector(coord.x, coord.y);
						for (int i = 0; i < applyAreaCount; i++)
						{
							Area area3 = applyAreas[i];
							if (distance.Matches(area3.MinDistanceWith(val), context) && area3.IsAlignedWith(val) && area3.GetStrictDirection4To(val) == dirOpt)
							{
								yield return coord;
								break;
							}
						}
					}
					ListPool<Area>.Release(applyAreas);
				}
			}
		}
 public IEnumerable <IEntity> Filter(IEnumerable <IEntity> entities, DynamicValueContext context)
 {
     if (ZoneAreaFilterUtils.SingleTargetToCompareArea(m_areaOfEntity, context, out Area area))
     {
         foreach (IEntity entity in entities)
         {
             IEntityWithBoardPresence entityWithBoardPresence = entity as IEntityWithBoardPresence;
             if (entityWithBoardPresence != null && area.Intersects(entityWithBoardPresence.area))
             {
                 yield return(entity);
             }
         }
     }
 }