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