/// <summary> /// Query an AABB for overlapping proxies. The callback class /// is called for each proxy that overlaps the supplied AABB. /// </summary> /// <param name="callback">The callback.</param> /// <param name="aabb">The AABB.</param> public void Query(Func <T, bool> callback, ref AABB aabb) { queryStack.Clear(); queryStack.Push(root); while (queryStack.Count > 0) { int nodeId = queryStack.Pop(); if (nodeId == NullNode) { continue; } TreeNode <T> node = nodes[nodeId]; if (AABB.TestOverlap(ref node.AABB, ref aabb)) { if (node.IsLeaf()) { bool proceed = callback(nodes[nodeId].UserData); if (proceed == false) { return; } } else { queryStack.Push(node.Child1); queryStack.Push(node.Child2); } } } }
/// <summary> /// Get user data from a proxy. Returns null if the id is invalid. /// </summary> /// <param name="proxyId">The proxy id.</param> /// <returns></returns> /*public ActorBase GetProxy(int proxyId) * { * return tree.GetUserData(proxyId); * }*/ /// <summary> /// Test overlap of fat AABBs. /// </summary> /// <param name="proxyIdA">The proxy id A.</param> /// <param name="proxyIdB">The proxy id B.</param> /// <returns></returns> public bool TestOverlap(ActorBase proxyA, ActorBase proxyB) { tree.GetFatAABB(proxyA.ProxyId, out AABB aabbA); tree.GetFatAABB(proxyB.ProxyId, out AABB aabbB); return(AABB.TestOverlap(ref aabbA, ref aabbB)); }