summaryrefslogtreecommitdiff
path: root/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs
diff options
context:
space:
mode:
Diffstat (limited to 'marching/Assets/Scripts/Physics/PhysicsQuadtree.cs')
-rw-r--r--marching/Assets/Scripts/Physics/PhysicsQuadtree.cs18
1 files changed, 17 insertions, 1 deletions
diff --git a/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs b/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs
index f4bad27..5cd374e 100644
--- a/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs
+++ b/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs
@@ -8,9 +8,20 @@ using UnityEngine;
/// </summary>
class PhysicsQuadtree
{
+ /// <summary>
+ /// 边界
+ /// </summary>
public Vector4 quadtreeRange { set { m_QuadtreeRange = value; } }
private Vector4 m_QuadtreeRange;
+
+ /// <summary>
+ /// 根节点
+ /// </summary>
private Quadtree m_Quadtree;
+
+ /// <summary>
+ /// 托管的全部对象,但不一定会加入到树里面(中心点在边界外的不加入树)
+ /// </summary>
private List<IQuadTreeObject> m_Objects = new List<IQuadTreeObject>();
public PhysicsQuadtree(Vector4 range)
@@ -33,12 +44,17 @@ class PhysicsQuadtree
{
m_Quadtree.Clear(false);
m_Quadtree.Rebound(m_QuadtreeRange);
+ InsertAllObjects();
+ }
+
+ private void InsertAllObjects()
+ {
Vector4 bound = m_Quadtree.bound;
for (int i = 0; i < m_Objects.Count; i++)
{
IQuadTreeObject obj = m_Objects[i];
// 简单的忽略中心在边界外的object
- if(PhysicsManager.IsPointInsideBox(bound, obj.bound.xy()))
+ if (PhysicsManager.IsPointInsideBox(bound, obj.bound.xy()))
{
m_Quadtree.Insert(obj);
}