Esempio n. 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);
				}
			}
		}
Esempio n. 2
0
        public IEnumerable <IEntity> Filter(IEnumerable <IEntity> entities, DynamicValueContext context)
        {
            List <Area> areas = ListPool <Area> .Get();

            areas.AddRange(ZoneAreaFilterUtils.TargetsToCompareAreaList(targetsToCompare, context));
            int areaCount = areas.Count;

            foreach (IEntity entity in entities)
            {
                IEntityWithBoardPresence entityWithBoardPresence = entity as IEntityWithBoardPresence;
                if (entityWithBoardPresence != null)
                {
                    for (int i = 0; i < areaCount; i++)
                    {
                        Area other = areas[i];
                        if (distance.Matches(entityWithBoardPresence.area.MinDistanceWith(other), context) && entityWithBoardPresence.area.IsAlignedWith(other))
                        {
                            yield return(entity);

                            break;
                        }
                    }
                }
            }
            ListPool <Area> .Release(areas);
        }
Esempio n. 3
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);
             }
         }
     }
 }
Esempio n. 5
0
        public IEnumerable <Coord> Filter(IEnumerable <Coord> coords, DynamicValueContext context)
        {
            List <Area> areas = ZoneAreaFilterUtils.TargetsToCompareAreaList(targetsToCompare, context).ToList();

            foreach (Coord coord in coords)
            {
                Vector2Int other = default(Vector2Int);
                other._002Ector(coord.x, coord.y);
                foreach (Area item in areas)
                {
                    if (distance.Matches(item.MinSquaredDistanceWith(other), context))
                    {
                        yield return(coord);

                        break;
                    }
                }
            }
        }
Esempio n. 6
0
        public IEnumerable <IEntity> Filter(IEnumerable <IEntity> entities, DynamicValueContext context)
        {
            List <Area> areas = ZoneAreaFilterUtils.TargetsToCompareAreaList(targetsToCompare, context).ToList();

            foreach (IEntity entity in entities)
            {
                IEntityWithBoardPresence entityWithBoardPresence = entity as IEntityWithBoardPresence;
                if (entityWithBoardPresence != null)
                {
                    foreach (Area item in areas)
                    {
                        if (distance.Matches(entityWithBoardPresence.area.MinSquaredDistanceWith(item), context))
                        {
                            yield return(entity);

                            break;
                        }
                    }
                }
            }
        }
Esempio n. 7
0
        public IEnumerable <Coord> Filter(IEnumerable <Coord> coords, DynamicValueContext context)
        {
            List <Area> areas = ListPool <Area> .Get();

            areas.AddRange(ZoneAreaFilterUtils.TargetsToCompareAreaList(targetsToCompare, context));
            int areaCount = areas.Count;

            foreach (Coord coord in coords)
            {
                Vector2Int other = default(Vector2Int);
                other._002Ector(coord.x, coord.y);
                for (int i = 0; i < areaCount; i++)
                {
                    if (distance.Matches(areas[i].MinDistanceWith(other), context))
                    {
                        yield return(coord);

                        break;
                    }
                }
            }
            ListPool <Area> .Release(areas);
        }