Exemplo n.º 1
0
        /// <summary>
        /// Performs a circle cast on all world bodies.
        /// </summary>
        public bool CircleCast(
            ref VoltRayCast ray,
            Fix64 radius,
            ref VoltRayResult result,
            VoltBodyFilter filter = null,
            int ticksBehind       = 0)
        {
            if (ticksBehind < 0)
            {
                throw new ArgumentOutOfRangeException("ticksBehind");
            }

            this.reusableBuffer.Clear();
            this.staticBroadphase.CircleCast(ref ray, radius, this.reusableBuffer);
            this.dynamicBroadphase.CircleCast(ref ray, radius, this.reusableBuffer);

            for (int i = 0; i < this.reusableBuffer.Count; i++)
            {
                VoltBody body = this.reusableBuffer[i];
                if (VoltBody.Filter(body, filter))
                {
                    body.CircleCast(ref ray, radius, ref result, ticksBehind);
                    if (result.IsContained)
                    {
                        return(true);
                    }
                }
            }
            return(result.IsValid);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Finds all bodies intersecting with a given circle.
        ///
        /// Subsequent calls to other Query functions (Point, Circle, Bounds) will
        /// invalidate the resulting enumeration from this function.
        /// </summary>
        public VoltBuffer <VoltBody> QueryCircle(
            VoltVector2 origin,
            Fix64 radius,
            VoltBodyFilter filter = null,
            int ticksBehind       = 0)
        {
            if (ticksBehind < 0)
            {
                throw new ArgumentOutOfRangeException("ticksBehind");
            }

            this.reusableBuffer.Clear();
            this.staticBroadphase.QueryCircle(origin, radius, this.reusableBuffer);
            this.dynamicBroadphase.QueryCircle(origin, radius, this.reusableBuffer);

            this.reusableOutput.Clear();
            for (int i = 0; i < this.reusableBuffer.Count; i++)
            {
                VoltBody body = this.reusableBuffer[i];
                if (VoltBody.Filter(body, filter))
                {
                    if (body.QueryCircle(origin, radius, ticksBehind))
                    {
                        this.reusableOutput.Add(body);
                    }
                }
            }

            return(this.reusableOutput);
        }