/// <summary> /// Finds all dynamic bodies that overlap with the explosion AABB /// and pass the target filter test. Does not test actual shapes. /// </summary> private void PopulateFiltered( TSVector2 origin, FP radius, VoltBodyFilter targetFilter, int ticksBehind, ref VoltBuffer <VoltBody> filterBuffer) { if (filterBuffer == null) { filterBuffer = new VoltBuffer <VoltBody>(); } filterBuffer.Clear(); this.reusableBuffer.Clear(); this.staticBroadphase.QueryCircle(origin, radius, this.reusableBuffer); this.dynamicBroadphase.QueryCircle(origin, radius, this.reusableBuffer); VoltAABB aabb = new VoltAABB(origin, radius); for (int i = 0; i < this.reusableBuffer.Count; i++) { VoltBody body = this.reusableBuffer[i]; if ((targetFilter == null) || targetFilter.Invoke(body)) { if (body.QueryAABBOnly(aabb, ticksBehind)) { filterBuffer.Add(body); } } } }
public static bool Filter(VoltBody body, VoltBodyFilter filter) { return((filter == null) || (filter.Invoke(body) == true)); }
/// <summary> /// Finds all dynamic bodies that overlap with the explosion AABB /// and pass the target filter test. Does not test actual shapes. /// </summary> private void PopulateFiltered( Vector2 origin, float radius, VoltBodyFilter targetFilter, int ticksBehind, ref VoltBuffer<VoltBody> filterBuffer) { if (filterBuffer == null) filterBuffer = new VoltBuffer<VoltBody>(); filterBuffer.Clear(); this.reusableBuffer.Clear(); this.staticBroadphase.QueryCircle(origin, radius, this.reusableBuffer); this.dynamicBroadphase.QueryCircle(origin, radius, this.reusableBuffer); VoltAABB aabb = new VoltAABB(origin, radius); for (int i = 0; i < this.reusableBuffer.Count; i++) { VoltBody body = this.reusableBuffer[i]; if ((targetFilter == null) || targetFilter.Invoke(body)) if (body.QueryAABBOnly(aabb, ticksBehind)) filterBuffer.Add(body); } }