Ejemplo n.º 1
0
        /// <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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public static bool Filter(VoltBody body, VoltBodyFilter filter)
 {
     return((filter == null) || (filter.Invoke(body) == true));
 }
Ejemplo n.º 3
0
        /// <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);
              }
        }