Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using NoobsUnited;
- using NoobsUnited.Swizzle;
- namespace UnityEngine
- {
- public partial class VPhysics2D : MonoBehaviour
- {
- public static RaycastHit2D[] BoxCastAll(Vector2 origin, Vector2 size, float angle, Vector2 direction, float distance = Mathf.Infinity, int layerMask = Physics.DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity)
- {
- GenerateRenderer ();
- CubeGeometry originGeometry = new CubeGeometry(origin, size);
- RaycastHit2D[] hits = Physics2D.BoxCastAll (origin, size, angle, direction, distance, layerMask, minDepth, maxDepth);
- if(hits.Length > 0)
- {
- foreach(RaycastHit2D hit in hits)
- {
- originGeometry.contactPoints.Add (hit.point);
- }
- CubeGeometry endCube = new CubeGeometry(origin + direction * distance, size);
- endCube.color.a = .5f;
- _geometry.Add (endCube);
- LineGeometry directionIndicatorAbove = new LineGeometry(origin + Vector2.up * size.y, endCube.origin.xy() + Vector2.up * size.y);
- directionIndicatorAbove.color.a = .3f;
- _geometry.Add (directionIndicatorAbove);
- LineGeometry directionIndicatorBelow = new LineGeometry(origin - Vector2.up * size.y, endCube.origin.xy() - Vector2.up * size.y);
- directionIndicatorBelow.color.a = .3f;
- _geometry.Add (directionIndicatorBelow);
- }
- else
- {
- if(distance == Mathf.Infinity)
- {
- _geometry.Add (new LineGeometry(originGeometry.origin, originGeometry.origin + (Vector3)direction.normalized * maxShapeCastDistance));
- CubeGeometry endCube = new CubeGeometry(origin + direction * maxShapeCastDistance, size);
- endCube.color.a = .5f;
- _geometry.Add (endCube);
- LineGeometry directionIndicatorAbove = new LineGeometry(origin + Vector2.up * size.y, endCube.origin.xy() + Vector2.up * size.y);
- directionIndicatorAbove.color.a = .3f;
- _geometry.Add (directionIndicatorAbove);
- LineGeometry directionIndicatorBelow = new LineGeometry(origin - Vector2.up * size.y, endCube.origin.xy() - Vector2.up * size.y);
- directionIndicatorBelow.color.a = .3f;
- _geometry.Add (directionIndicatorBelow);
- }
- else if(distance != Mathf.Infinity && distance >= 0)
- {
- CubeGeometry endCube = new CubeGeometry(origin + direction * distance, size);
- endCube.color.a = .5f;
- _geometry.Add (endCube);
- LineGeometry directionIndicatorAbove = new LineGeometry(origin + Vector2.up * size.y, endCube.origin.xy() + Vector2.up * size.y);
- directionIndicatorAbove.color.a = .3f;
- _geometry.Add (directionIndicatorAbove);
- LineGeometry directionIndicatorBelow = new LineGeometry(origin - Vector2.up * size.y, endCube.origin.xy() - Vector2.up * size.y);
- directionIndicatorBelow.color.a = .3f;
- _geometry.Add (directionIndicatorBelow);
- }
- }
- _geometry.Add(originGeometry);
- return hits;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement