summaryrefslogtreecommitdiff
path: root/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-05-09 18:52:28 +0800
committerchai <215380520@qq.com>2023-05-09 18:52:28 +0800
commit4afa7c36ba9ec33ed113dcfb7cd33bd630d444f2 (patch)
treead7260d6a1e84cd1ab56493294301df34d6bb5a6 /marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs
parentf986dc197b5e093575bc0b56ee0ded991c228639 (diff)
*misc
Diffstat (limited to 'marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs')
-rw-r--r--marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs58
1 files changed, 57 insertions, 1 deletions
diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs b/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs
index 48af516..7b4aa1c 100644
--- a/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs
+++ b/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs
@@ -19,6 +19,27 @@ public partial class PhysicsManager : Singleton<PhysicsManager>
return box;
}
+ public Vector4 GetRayBound(Vector4 line, float maxLen=20f)
+ {
+ Vector2 tr = line.xy() + maxLen * line.zw().normalized;
+ Vector4 bound = new Vector4();
+ bound.x = (tr.x + line.x) / 2;
+ bound.y = (tr.y + line.y) / 2;
+ bound.z = Mathf.Abs(tr.x - line.x);
+ bound.w = Mathf.Abs(tr.y - line.y);
+ return bound;
+ }
+
+ public Vector4 GetPointBound(Vector2 point)
+ {
+ Vector4 bound = new Vector4();
+ bound.x = point.x;
+ bound.y = point.y;
+ bound.z = 1;
+ bound.w = 1;
+ return bound;
+ }
+
public ref readonly List<IQuadTreeObject> CircleCast(ColliderType target, Vector3 circle)
{
m_SharedCollideResults.Clear();
@@ -55,10 +76,45 @@ public partial class PhysicsManager : Singleton<PhysicsManager>
public ref readonly List<IQuadTreeObject> BoxCast(ColliderType target, Vector4 box)
{
+ m_SharedCollideResults.Clear();
+ var retriver = GetRetriverByType(target);
+ if (retriver != null)
+ {
+ if (retriver(GetBoxBound(box)))
+ {
+ for (int i = 0; i < m_SharedRetriveResults.Count; ++i)
+ {
+ var collider = m_SharedRetriveResults[i];
+ if (collider != null)
+ {
+ if (collider is FastCircleCollider)
+ {
+ if (BoxVsCircle(box, (collider as FastCircleCollider).circle))
+ {
+ m_SharedCollideResults.Add(collider);
+ }
+ }
+ else if (collider is FastBoxCollider)
+ {
+ if (BoxVsBox(box, (collider as FastBoxCollider).box))
+ {
+ m_SharedCollideResults.Add(collider);
+ }
+ }
+ }
+ }
+ }
+ }
return ref m_SharedCollideResults;
}
- public ref readonly List<IQuadTreeObject> LineCast(ColliderType target, Vector4 line)
+ /// <summary>
+ /// x,y dir.x dir.y
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="line"></param>
+ /// <returns></returns>
+ public ref readonly List<IQuadTreeObject> RayCast(ColliderType target, Vector4 ray, float maxLength = 20f)
{
return ref m_SharedCollideResults;
}