diff options
Diffstat (limited to 'marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs')
-rw-r--r-- | marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs b/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs new file mode 100644 index 0000000..48af516 --- /dev/null +++ b/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs @@ -0,0 +1,71 @@ +using mh; +using System.Collections; +using System.Collections.Generic; +using Unity.VisualScripting.Antlr3.Runtime.Tree; +using UnityEngine; + +public partial class PhysicsManager : Singleton<PhysicsManager> +{ + private List<IQuadTreeObject> m_SharedCollideResults = new List<IQuadTreeObject>(); + + public Vector4 GetCircleBound(Vector3 circle) + { + float size = circle.z * 2; + return new Vector4(circle.x, circle.y, size, size); + } + + public Vector4 GetBoxBound(Vector4 box) + { + return box; + } + + public ref readonly List<IQuadTreeObject> CircleCast(ColliderType target, Vector3 circle) + { + m_SharedCollideResults.Clear(); + var retriver = GetRetriverByType(target); + if(retriver != null) + { + if (retriver(GetCircleBound(circle))) + { + for(int i = 0; i < m_SharedRetriveResults.Count; ++i) + { + var collider = m_SharedRetriveResults[i]; + if(collider != null) + { + if(collider is FastCircleCollider) + { + if(CircleVsCircle((collider as FastCircleCollider).circle, circle)) + { + m_SharedCollideResults.Add(collider); + } + } + else if(collider is FastBoxCollider) + { + if (BoxVsCircle((collider as FastBoxCollider).box, circle)) + { + m_SharedCollideResults.Add(collider); + } + } + } + } + } + } + return ref m_SharedCollideResults; + } + + public ref readonly List<IQuadTreeObject> BoxCast(ColliderType target, Vector4 box) + { + return ref m_SharedCollideResults; + } + + public ref readonly List<IQuadTreeObject> LineCast(ColliderType target, Vector4 line) + { + return ref m_SharedCollideResults; + } + + public ref readonly List<IQuadTreeObject> PointCast(ColliderType target, Vector2 point) + { + return ref m_SharedCollideResults; + } + +}
\ No newline at end of file |