Beispiel #1
0
  public BroadPhase(AABB worldAABB, PairCallback callback) {
    if (debugPrint) {
      System.out.println("BroadPhase()");
    }

    // array initialization
    m_proxyPool = new Proxy[Settings.maxProxies];
    pairBuffer = new BufferedPair[Settings.maxPairs];
    m_bounds = new Bound[2][2 * Settings.maxProxies];
    m_queryResults = new int[Settings.maxProxies];

    for (int i = 0; i < 2 * Settings.maxProxies; i++) {
      m_bounds[0][i] = new Bound();
      m_bounds[1][i] = new Bound();
    }

    for (int i = 0; i < Settings.maxProxies; i++) {
      pairBuffer[i] = new BufferedPair();
    }

    m_pairManager = new PairManager();
    m_pairManager.initialize(this, callback);

    assert worldAABB.isValid();

    m_worldAABB = new AABB(worldAABB);
    m_proxyCount = 0;

    Vec2 d = worldAABB.upperBound.sub(worldAABB.lowerBound);
    m_quantizationFactor = new Vec2(Integer.MAX_VALUE / d.x, Integer.MAX_VALUE / d.y);

    for (int i = 0; i < Settings.maxProxies - 1; ++i) {
      m_proxyPool[i] = new Proxy();
      m_proxyPool[i].setNext(i + 1);
      m_proxyPool[i].timeStamp = 0;
      m_proxyPool[i].overlapCount = INVALID;
      m_proxyPool[i].userData = null;
    }

    m_proxyPool[Settings.maxProxies - 1] = new Proxy();
    m_proxyPool[Settings.maxProxies - 1].setNext(PairManager.NULL_PROXY);
    m_proxyPool[Settings.maxProxies - 1].timeStamp = 0;
    m_proxyPool[Settings.maxProxies - 1].overlapCount = INVALID;
    m_proxyPool[Settings.maxProxies - 1].userData = null;
    m_freeProxy = 0;

    m_timeStamp = 1;
    m_queryResultCount = 0;
  }