diff options
author | chai <215380520@qq.com> | 2023-05-09 13:14:14 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-05-09 13:14:14 +0800 |
commit | f986dc197b5e093575bc0b56ee0ded991c228639 (patch) | |
tree | bf13c22f38d9186422daa9b200f16143fc003464 /marching/Assets/Scripts/Physics/PhysicsManager.cs | |
parent | c35533e31efe30121a7c61a725fdaaba47714296 (diff) |
*misc
Diffstat (limited to 'marching/Assets/Scripts/Physics/PhysicsManager.cs')
-rw-r--r-- | marching/Assets/Scripts/Physics/PhysicsManager.cs | 35 |
1 files changed, 32 insertions, 3 deletions
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<PhysicsManager> +/// <summary> +/// 四叉树空间划分,优化碰撞检测 +/// </summary> +public partial class PhysicsManager : Singleton<PhysicsManager> { + #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<PhysicsManager> private Vector4 m_QuadtreeHurtboxRange; private Quadtree m_QuadtreeHurtboxes; private List<IQuadTreeObject> m_QuadtreeObjHurtboxes = new List<IQuadTreeObject>(); + #endregion + public List<IQuadTreeObject> sharedRetriveResults => m_SharedRetriveResults; + private List<IQuadTreeObject> m_SharedRetriveResults = new List<IQuadTreeObject>(); public PhysicsManager() { @@ -99,9 +106,31 @@ public class PhysicsManager : Singleton<PhysicsManager> return m_QuadtreeCollision.Retrieve(ref returnObjs, bound); } - public static bool CircleVsCircle(Vector2 pos1, float r1, Vector2 pos2, float r2) + public bool RetriveHurtboxes(ref List<IQuadTreeObject> 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<Vector4, bool> 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 |