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