Class BroadPhase

  • All Implemented Interfaces:
    TreeCallback

    public class BroadPhase
    extends java.lang.Object
    implements TreeCallback
    The broad-phase is used for computing pairs and performing volume queries and ray casts. This broad-phase does not persist pairs. Instead, this reports potentially new pairs. It is up to the client to consume the new pairs and to track subsequent overlap.
    • Field Detail

      • m_proxyCount

        private int m_proxyCount
      • m_moveBuffer

        private int[] m_moveBuffer
      • m_moveCapacity

        private int m_moveCapacity
      • m_moveCount

        private int m_moveCount
      • m_pairBuffer

        private Pair[] m_pairBuffer
      • m_pairCapacity

        private int m_pairCapacity
      • m_pairCount

        private int m_pairCount
      • m_queryProxyId

        private int m_queryProxyId
    • Method Detail

      • createProxy

        public final int createProxy​(AABB aabb,
                                     java.lang.Object userData)
        Create a proxy with an initial AABB. Pairs are not reported until updatePairs is called.
        Parameters:
        aabb -
        userData -
        Returns:
      • destroyProxy

        public final void destroyProxy​(int proxyId)
        Destroy a proxy. It is up to the client to remove any pairs.
        Parameters:
        proxyId -
      • moveProxy

        public final void moveProxy​(int proxyId,
                                    AABB aabb,
                                    Vec2 displacement)
        Call MoveProxy as many times as you like, then when you are done call UpdatePairs to finalized the proxy pairs (for your time step).
      • touchProxy

        public void touchProxy​(int proxyId)
      • getUserData

        public java.lang.Object getUserData​(int proxyId)
      • getFatAABB

        public AABB getFatAABB​(int proxyId)
      • testOverlap

        public boolean testOverlap​(int proxyIdA,
                                   int proxyIdB)
      • getProxyCount

        public final int getProxyCount()
        Get the number of proxies.
        Returns:
      • drawTree

        public void drawTree​(DebugDraw argDraw)
      • updatePairs

        public final void updatePairs​(PairCallback callback)
        Update the pairs. This results in pair callbacks. This can only add pairs.
        Parameters:
        callback -
      • query

        public final void query​(TreeCallback callback,
                                AABB aabb)
        Query an AABB for overlapping proxies. The callback class is called for each proxy that overlaps the supplied AABB.
        Parameters:
        callback -
        aabb -
      • raycast

        public final void raycast​(TreeRayCastCallback callback,
                                  RayCastInput input)
        Ray-cast against the proxies in the tree. This relies on the callback to perform a exact ray-cast in the case were the proxy contains a shape. The callback also performs the any collision filtering. This has performance roughly equal to k * log(n), where k is the number of collisions and n is the number of proxies in the tree.
        Parameters:
        input - the ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).
        callback - a callback class that is called for each proxy that is hit by the ray.
      • getTreeHeight

        public final int getTreeHeight()
        Get the height of the embedded tree.
        Returns:
      • getTreeBalance

        public int getTreeBalance()
      • getTreeQuality

        public float getTreeQuality()
      • bufferMove

        protected final void bufferMove​(int proxyId)
      • unbufferMove

        protected final void unbufferMove​(int proxyId)
      • treeCallback

        public final boolean treeCallback​(int proxyId)
        This is called from DynamicTree::query when we are gathering pairs.
        Specified by:
        treeCallback in interface TreeCallback
        Parameters:
        proxyId - the id of the proxy
        Returns:
        if the query should be continued