public static bool Pointcast(Vector2 point, out RaycastHit hitInfo, int layerMask) { #if DEBUG Application.raycastTimer.Start(); #endif Fixture f = world.TestPointActive(point, layerMask); hitInfo = new RaycastHit(); if (f != null) { hitInfo.body = f.Body; hitInfo.collider = f.Body.UserData; hitInfo.transform = f.Body.UserData.transform; hitInfo.point = VectorConverter.Convert(point, f.Body.UserData.to2dMode); } #if DEBUG Application.raycastTimer.Stop(); #endif return(f != null); }
internal static float rayCastCallback(Fixture fixture, Microsoft.Xna.Framework.Vector2 point, Microsoft.Xna.Framework.Vector2 normal, float fraction) { float dist = _distance * fraction; Component uo = fixture.Body.UserData; Collider coll = uo as Collider; if (coll == null && (uo is Rigidbody)) { coll = (uo as Rigidbody).collider; } if ((coll != null) && (coll.gameObject != null) && (coll.gameObject.active) && (_layerMask & (1 << coll.gameObject.layer)) > 0) { if (_findClosest) { if (dist < _nearest) { _nearest = dist; _hit.body = fixture.Body; _hit.point = VectorConverter.Convert(point, coll.to2dMode); _hit.normal = VectorConverter.Convert(normal, coll.to2dMode); _hit.distance = dist; _hit.collider = coll; _hit.transform = coll.transform; _didHit = true; } return(fraction); } else { _hits[_hitCount].body = fixture.Body; _hits[_hitCount].collider = coll; _hits[_hitCount].distance = dist; _hits[_hitCount].normal = VectorConverter.Convert(normal, coll.to2dMode); _hits[_hitCount].point = VectorConverter.Convert(point, coll.to2dMode); _hits[_hitCount].transform = coll.transform; _hitCount++; return(1); } } return(-1); }
internal static Bounds FromAABB(ref AABB aabb, Physics.To2dMode to2dMode, Vector3 size) { Vector3 center = VectorConverter.Convert(aabb.Center, to2dMode); Vector3 sz = VectorConverter.Convert(aabb.Extents * 2, to2dMode); switch (to2dMode) { case Physics.To2dMode.DropX: sz.x = size.x; break; case Physics.To2dMode.DropY: sz.y = size.y; break; case Physics.To2dMode.DropZ: sz.z = size.z; break; } return(new Bounds(center, sz)); }
public static void Update(float elapsedTime) { #if DEBUG if (ApplicationSettings.ShowBodyCounter) { Debug.Display("Body count", world.BodyList.Count); } #endif world.Step(elapsedTime); for (int i = rigidBodies.Count - 1; i >= 0; i--) { Body body = rigidBodies[i]; Collider comp = (Collider)body.UserData; FarseerPhysics.Common.Transform t; body.GetTransform(out t); comp.transform.SetPositionFromPhysics(VectorConverter.Convert(t.Position, comp.to2dMode), t.Angle, VectorConverter.GetUp(comp.to2dMode)); } contactProcessor.Update(); }
public static RaycastHit[] PointcastAll(Vector2 point, int layerMask) { #if DEBUG Application.raycastTimer.Start(); #endif fList.Clear(); world.TestPointAllActive(point, fList, layerMask); RaycastHit[] hits = new RaycastHit[fList.Count]; for (int i = 0; i < fList.Count; i++) { Fixture f = fList[i]; RaycastHit hitInfo = new RaycastHit(); hitInfo.body = f.Body; hitInfo.collider = f.Body.UserData; hitInfo.transform = f.Body.UserData.transform; hitInfo.point = VectorConverter.Convert(point, f.Body.UserData.to2dMode); hits[i] = hitInfo; } #if DEBUG Application.raycastTimer.Stop(); #endif return(hits); }