summaryrefslogtreecommitdiff
path: root/marching/Assets/Scripts/Physics/PhysicsManager.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-05-09 13:14:14 +0800
committerchai <215380520@qq.com>2023-05-09 13:14:14 +0800
commitf986dc197b5e093575bc0b56ee0ded991c228639 (patch)
treebf13c22f38d9186422daa9b200f16143fc003464 /marching/Assets/Scripts/Physics/PhysicsManager.cs
parentc35533e31efe30121a7c61a725fdaaba47714296 (diff)
*misc
Diffstat (limited to 'marching/Assets/Scripts/Physics/PhysicsManager.cs')
-rw-r--r--marching/Assets/Scripts/Physics/PhysicsManager.cs35
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