From f986dc197b5e093575bc0b56ee0ded991c228639 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Tue, 9 May 2023 13:14:14 +0800 Subject: *misc --- marching/Assets/Scripts/Physics/PhysicsManager.cs | 35 +++++++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'marching/Assets/Scripts/Physics/PhysicsManager.cs') diff --git a/marching/Assets/Scripts/Physics/PhysicsManager.cs b/marching/Assets/Scripts/Physics/PhysicsManager.cs index 6daf610..c4e6017 100644 --- a/marching/Assets/Scripts/Physics/PhysicsManager.cs +++ b/marching/Assets/Scripts/Physics/PhysicsManager.cs @@ -11,8 +11,12 @@ public enum ColliderType Hitbox, } -public class PhysicsManager : Singleton +/// +/// 四叉树空间划分,优化碰撞检测 +/// +public partial class PhysicsManager : Singleton { + #region Quadtrees public Vector4 quadtreeCollisionRange { set { m_QuadtreeCollisionRange = value; } } private Vector4 m_QuadtreeCollisionRange; private Quadtree m_QuadtreeCollision; @@ -22,6 +26,9 @@ public class PhysicsManager : Singleton private Vector4 m_QuadtreeHurtboxRange; private Quadtree m_QuadtreeHurtboxes; private List m_QuadtreeObjHurtboxes = new List(); + #endregion + public List sharedRetriveResults => m_SharedRetriveResults; + private List m_SharedRetriveResults = new List(); public PhysicsManager() { @@ -99,9 +106,31 @@ public class PhysicsManager : Singleton return m_QuadtreeCollision.Retrieve(ref returnObjs, bound); } - public static bool CircleVsCircle(Vector2 pos1, float r1, Vector2 pos2, float r2) + public bool RetriveHurtboxes(ref List returnObjs, Vector4 bound) { - return (pos1 - pos2).magnitude <= r1+r2; + return m_QuadtreeHurtboxes.Retrieve(ref returnObjs, bound); + } + + public bool RetriveColliders(Vector4 bound) + { + m_SharedRetriveResults.Clear(); + return m_QuadtreeCollision.Retrieve(ref m_SharedRetriveResults, bound); + } + + public bool RetriveHurtboxes(Vector4 bound) + { + m_SharedRetriveResults.Clear(); + return m_QuadtreeHurtboxes.Retrieve(ref m_SharedRetriveResults, bound); + } + + public System.Func GetRetriverByType(ColliderType type) + { + if (type == ColliderType.Collider) + return RetriveColliders; + else if (type == ColliderType.Hurtbox) + return RetriveHurtboxes; + else + return null; } } \ No newline at end of file -- cgit v1.1-26-g67d0