diff options
Diffstat (limited to 'marching/Assets/Scripts/Physics/PhysicsQuadtree.cs')
-rw-r--r-- | marching/Assets/Scripts/Physics/PhysicsQuadtree.cs | 18 |
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); } |