Home Reference Source

source/modules/BVHBranch.js

/**
 * @private
 */
const branch_pool = []

/**
 * A branch within a BVH
 * @class
 * @private
 */
class BVHBranch {
  /**
   * @constructor
   */
  constructor () {
    /** @private */
    this._bvh_parent = null

    /** @private */
    this._bvh_branch = true

    /** @private */
    this._bvh_left = null

    /** @private */
    this._bvh_right = null

    /** @private */
    this._bvh_sort = 0

    /** @private */
    this._bvh_min_x = 0

    /** @private */
    this._bvh_min_y = 0

    /** @private */
    this._bvh_max_x = 0

    /** @private */
    this._bvh_max_y = 0
  }

  /**
   * Returns a branch from the branch pool or creates a new branch
   * @returns {BVHBranch}
   */
  static getBranch () {
    if (branch_pool.length) {
      return branch_pool.pop()
    }

    return new BVHBranch()
  }

  /**
   * Releases a branch back into the branch pool
   * @param {BVHBranch} branch The branch to release
   */
  static releaseBranch (branch) {
    branch_pool.push(branch)
  }

  /**
   * Sorting callback used to sort branches by deepest first
   * @param {BVHBranch} a The first branch
   * @param {BVHBranch} b The second branch
   * @returns {Number}
   */
  static sortBranches (a, b) {
    return a.sort > b.sort ? -1 : 1
  }
};

module.exports = BVHBranch

module.exports.default = module.exports