summaryrefslogtreecommitdiff
path: root/marching/Assets/Scripts/Physics/PhysicsManager.cs
diff options
context:
space:
mode:
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