UNPKG

hashbounds

Version:

Collision detection optimized 2d datastructure for usage in games

786 lines (482 loc) 29.8 kB
[![NPM](https://img.shields.io/badge/Module-Npm-blue.svg)](https://www.npmjs.com/package/hashbounds) [![Demo](https://cloud.githubusercontent.com/assets/13282284/23081424/b7cd5f16-f522-11e6-8fe9-dfdde154340d.png)](https://ajs-development.github.io/HashBounds/dist/visual/) # HashBounds Collision detection optimized 2d datastructure for usage in games. Particularily useful when: * Objects have varying sizes * Objects are continually moving * Map size is not determinable/fixed at start # Usage > npm install hashbounds@5 ```js const HashBounds = require("hashbounds"); // Initialize hashbounds with min grid size of 16 and 3 levels and pre-initialize buckets in 1000x1000 map. let myData = new HashBounds(16, 3, { x: 0, y: 0, width: 1000, height: 1000 }); // You don't have to pre-initialize buckets myData = new HashBounds(16, 3); // An entry is some sort of object const entry = { foo: "bar" } // Insert an entry myData.insert(entry, { x: 0, y: 0, width: 10, height: 10 }); // Get array at bounds myData.toArray({ x: 0, y: 0, width: 5, height: 5 }).length // 1 // Iterate at bounds myData.forEach({ x: 0, y: 0, width: 5, height: 5 }, (item)=>{ }); // Iterate at bounds cancellable myData.every({ x: 0, y: 0, width: 5, height: 5 }, (item)=>{ return true; // True to continue iteration }); // Update the entry's bounds myData.update(entry, { x: 10, y: 10, width: 3, height: 4 }); // You can also use min/max format for all bounds. myData.update(entry, { minX: 10, minY: 10, maxX: 13, maxY: 14 }); // Remove entry myData.remove(entry); ``` # API <!-- Generated by documentation.js. Update this documentation by updating the source code. --> ### Table of Contents * [BoundsPS](#boundsps) * [Properties](#properties) * [BoundsMM](#boundsmm) * [Properties](#properties-1) * [Bounds](#bounds) * [Entry](#entry) * [EntryCache](#entrycache) * [ForEachCallback](#foreachcallback) * [Parameters](#parameters) * [EveryCallback](#everycallback) * [Parameters](#parameters-1) * [HashBounds](#hashbounds) * [Parameters](#parameters-2) * [getQueryID](#getqueryid) * [setupLog2](#setuplog2) * [createLevels](#createlevels) * [initializeArea](#initializearea) * [Parameters](#parameters-3) * [init](#init) * [clear](#clear) * [prune](#prune) * [update](#update) * [Parameters](#parameters-4) * [getLevel](#getlevel) * [Parameters](#parameters-5) * [insert](#insert) * [Parameters](#parameters-6) * [remove](#remove) * [Parameters](#parameters-7) * [contains](#contains) * [Parameters](#parameters-8) * [getHashCache](#gethashcache) * [Parameters](#parameters-9) * [toArray](#toarray) * [Parameters](#parameters-10) * [every](#every) * [Parameters](#parameters-11) * [forEach](#foreach) * [Parameters](#parameters-12) * [boundsFitsInHash](#boundsfitsinhash) * [Parameters](#parameters-13) * [mmToPS](#mmtops) * [Parameters](#parameters-14) * [psToMM](#pstomm) * [Parameters](#parameters-15) * [boundsOverlap](#boundsoverlap) * [Parameters](#parameters-16) * [boundsContains](#boundscontains) * [Parameters](#parameters-17) * [truncateBounds](#truncatebounds) * [Parameters](#parameters-18) * [convertBounds](#convertbounds) * [Parameters](#parameters-19) * [HashGrid](#hashgrid) * [Parameters](#parameters-20) * [initializeArea](#initializearea-1) * [Parameters](#parameters-21) * [deleteBucket](#deletebucket) * [Parameters](#parameters-22) * [setBucket](#setbucket) * [Parameters](#parameters-23) * [getBucket](#getbucket) * [Parameters](#parameters-24) * [createBucket](#createbucket) * [Parameters](#parameters-25) * [prune](#prune-1) * [pruneBucket](#prunebucket) * [Parameters](#parameters-26) * [update](#update-1) * [Parameters](#parameters-27) * [insert](#insert-1) * [Parameters](#parameters-28) * [remove](#remove-1) * [Parameters](#parameters-29) * [every](#every-1) * [Parameters](#parameters-30) * [TreeBucket](#treebucket) * [Parameters](#parameters-31) * [updateQuadCache](#updatequadcache) * [add](#add) * [subtract](#subtract) * [getQuad](#getquad) * [Parameters](#parameters-32) * [\_every](#\_every) * [Parameters](#parameters-33) * [every](#every-2) * [Parameters](#parameters-34) * [everyAll](#everyall) * [Parameters](#parameters-35) * [remove](#remove-2) * [Parameters](#parameters-36) * [set](#set) * [Parameters](#parameters-37) ## BoundsPS [src/HashBounds.js:72-72](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L26-L33 "Source code on GitHub") A 2d bounding box represented by a point and sizes. Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object) ### Properties * `x` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `y` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `width` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `height` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** ## BoundsMM [src/HashBounds.js:72-72](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L35-L42 "Source code on GitHub") A 2d bounding box represented by min/max points. Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object) ### Properties * `minX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `minY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `maxX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `maxY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** ## Bounds [src/HashBounds.js:72-72](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L44-L47 "Source code on GitHub") An object representing a 2d bounding box. Type: ([BoundsPS](#boundsps) | [BoundsMM](#boundsmm)) ## Entry [src/HashBounds.js:72-72](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L49-L52 "Source code on GitHub") Represents an entry Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object) ## EntryCache [src/HashBounds.js:72-72](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L54-L57 "Source code on GitHub") Represents an entry's cache object Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object) ## ForEachCallback [src/HashBounds.js:72-72](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L59-L63 "Source code on GitHub") Callback function used in .forEach() calls Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function) ### Parameters * `entry` **[Entry](#entry)** Entry ## EveryCallback [src/HashBounds.js:72-72](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L65-L70 "Source code on GitHub") Callback function used in .every() calls Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function) ### Parameters * `entry` **[Entry](#entry)** Entry Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Return true to continue iteration, false to cancel. ## HashBounds [src/HashBounds.js:80-361](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L80-L361 "Source code on GitHub") HashBounds Stores/Organizes arbitrary objects with 2d bounding box data in the form of a spatial grid tree that is quick to query. It is particularily efficient when objects have varying sizes. Constant time insertion and removal, and n log n search. ### Parameters * `minSize` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** The size of the smallest grid cell. * `levelCount` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Specifies the number of levels/depth. Each additional level has a grid size twice as large then the previous in one axis, 4x size in area. * `initialBounds` **[Bounds](#bounds)?** Optionally specifies the bounds used to pre-initilize the datastructure. These bounds are not enforced. * `id` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** Optionally specify a unique ID of the hash. ### getQueryID [src/HashBounds.js:113-119](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L113-L119 "Source code on GitHub") Returns an incremented number used to filter non-unique entries during search queries. Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** ### setupLog2 [src/HashBounds.js:124-131](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L124-L131 "Source code on GitHub") Initializes a dictionary of ceiled log2 values that are frequently used by the data structure ### createLevels [src/HashBounds.js:136-150](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L136-L150 "Source code on GitHub") Initializes the basic hierarchical structure of levels. ### initializeArea [src/HashBounds.js:155-157](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L155-L157 "Source code on GitHub") Pre-initializes an area according to some bounds #### Parameters * `initialBounds` ### init [src/HashBounds.js:162-165](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L162-L165 "Source code on GitHub") Initializes the data structure and pre-initializes area if applicable ### clear [src/HashBounds.js:170-174](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L170-L174 "Source code on GitHub") Clear the data structure and reinitialize it. ### prune [src/HashBounds.js:179-181](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L179-L181 "Source code on GitHub") Removes empty buckets. ### update [src/HashBounds.js:191-207](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L191-L207 "Source code on GitHub") Updates the entry when its bounds have changed. #### Parameters * `entry` **[Entry](#entry)** The entry to update. * `bounds` **[Bounds](#bounds)** The 2d bounding box of the entry. <!----> * Throws **any** Will throw an error if the entry is not present. Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** A boolean value that is true to indicate something has changed ### getLevel [src/HashBounds.js:216-229](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L216-L229 "Source code on GitHub") Gets the level index the entry should belong to with the appropriate bounding box. #### Parameters * `bounds` **[Bounds](#bounds)** The 2d bounding box of the entry. * `entryCache` **[EntryCache](#entrycache)** Cache object Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** The index of the level. ### insert [src/HashBounds.js:238-264](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L238-L264 "Source code on GitHub") Inserts a entry with a specified 2d bounding box. #### Parameters * `entry` **[Entry](#entry)** The entry to insert. * `bounds` **[Bounds](#bounds)** The 2d bounding box of the entry. <!----> * Throws **any** Will throw an error if the entry is already present. ### remove [src/HashBounds.js:272-277](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L272-L277 "Source code on GitHub") Removes an entry. #### Parameters * `entry` **[Entry](#entry)** The entry to remove. <!----> * Throws **any** Will throw an error if the entry is not present. ### contains [src/HashBounds.js:284-286](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L284-L286 "Source code on GitHub") Returns true if the entry is present. #### Parameters * `entry` **[Entry](#entry)** Returns **[Boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** ### getHashCache [src/HashBounds.js:293-295](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L293-L295 "Source code on GitHub") Returns the cache object from a entry #### Parameters * `entry` **[Entry](#entry)** Returns **[EntryCache](#entrycache)** ### toArray [src/HashBounds.js:302-312](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L302-L312 "Source code on GitHub") Retrieves an array of unique entries that may overlap with a 2d bounding box. #### Parameters * `bounds` **[Bounds](#bounds)?** A 2d bounding box to search. Returns **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** An array of entries. ### every [src/HashBounds.js:323-330](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L323-L330 "Source code on GitHub") Iterates through unique entries that may overlap with a 2d bounding box. Iteration may be stopped. Similar to Array.every #### Parameters * `bounds` **[Bounds](#bounds)?** A 2d bounding box to search. * `call` **[EveryCallback](#everycallback)** A callback function with the first argument indicating the entry. Return true to continue iteration, return false to stop. Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Returns false if cancelled. ### forEach [src/HashBounds.js:340-350](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L340-L350 "Source code on GitHub") Iterates through unique entries that may overlap with a 2d bounding box. Iteration cannot be stopped. Similar to Array.forEach #### Parameters * `bounds` **[Bounds](#bounds)?** A 2d bounding box to search. * `call` **[ForEachCallback](#foreachcallback)** A callback function with the first argument indicating the entry. ### boundsFitsInHash [src/HashBounds.js:357-360](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L357-L360 "Source code on GitHub") Check if bounds exceeds the pre-initialized size of the datastructure #### Parameters * `bounds` **[Bounds](#bounds)** Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** ### mmToPS [src/HashBounds.js:368-373](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L368-L373 "Source code on GitHub") Converts a min-max 2d bound to pos-size format in place #### Parameters * `bounds` **[Bounds](#bounds)** ### psToMM [src/HashBounds.js:379-385](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L379-L385 "Source code on GitHub") Converts a pos-size 2d bound to min-max format in place #### Parameters * `bounds` **[Bounds](#bounds)** ### boundsOverlap [src/HashBounds.js:393-395](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L393-L395 "Source code on GitHub") Checks if two 2d bounding boxes are overlapping. #### Parameters * `bounds1` **[Bounds](#bounds)** * `bounds2` **[Bounds](#bounds)** Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** ### boundsContains [src/HashBounds.js:403-405](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L403-L405 "Source code on GitHub") Checks if one 2d bounding box is fully contained in another. #### Parameters * `bounds1` **[Bounds](#bounds)** Inner box * `bounds2` **[Bounds](#bounds)** Outer box Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** ### truncateBounds [src/HashBounds.js:416-435](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L416-L435 "Source code on GitHub") Truncates bounds to fit a certain area #### Parameters * `bounds` **[Bounds](#bounds)** * `minX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `minY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `maxX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `maxY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** <!----> * Throws **any** Will throw error if bounds are unformatted. ### convertBounds [src/HashBounds.js:442-458](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashBounds.js#L442-L458 "Source code on GitHub") Formats/converts 2d bounding boxes. #### Parameters * `bounds` **[Bounds](#bounds)** <!----> * Throws **any** Error if invalid ## HashGrid [src/HashGrid.js:34-302](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L34-L302 "Source code on GitHub") HashGrid. A doubly linked 2d spatial hash/grid which stores TreeBuckets. Multiple grids are typically used by HashBounds. Allows for constant time insertion and deletion by using Math.floor(X / gridSize). ### Parameters * `bucketSize` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** The size of the buckets * `level` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** The level/index of the grid. Higher levels have double the bucketSize than the preceding. ### initializeArea [src/HashGrid.js:53-64](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L53-L64 "Source code on GitHub") Pre-initializes buckets in a 2d bounding box. While these bounds are not strictly enforced for entries, pre-initialization will increase performance. #### Parameters * `initialBounds` **[Bounds](#bounds)** Bounds to initialize area with. ### deleteBucket [src/HashGrid.js:71-77](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L71-L77 "Source code on GitHub") Deletes a bucket from the bucket grid. #### Parameters * `bucketX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `bucketY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** ### setBucket [src/HashGrid.js:85-92](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L85-L92 "Source code on GitHub") Inserts a bucket into the bucket grid. #### Parameters * `bucketX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `bucketY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `bucket` **[TreeBucket](#treebucket)** ### getBucket [src/HashGrid.js:100-103](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L100-L103 "Source code on GitHub") Gets a bucket from the bucket grid #### Parameters * `bucketX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `bucketY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Returns **[TreeBucket](#treebucket)** ### createBucket [src/HashGrid.js:111-135](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L111-L135 "Source code on GitHub") Creates, initializes, and returns a bucket at a certain position. Any parent buckets will be created. #### Parameters * `bucketX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `bucketY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Returns **[TreeBucket](#treebucket)** ### prune [src/HashGrid.js:140-150](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L140-L150 "Source code on GitHub") Prunes empty buckets. ### pruneBucket [src/HashGrid.js:156-169](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L156-L169 "Source code on GitHub") Prunes an empty bucket and its empty parents. #### Parameters * `bucket` **[TreeBucket](#treebucket)** ### update [src/HashGrid.js:178-196](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L178-L196 "Source code on GitHub") Updates a entry. #### Parameters * `entry` **[Entry](#entry)** * `bounds` **[Bounds](#bounds)** * `entryCache` **[EntryCache](#entrycache)** Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Returns true if there was a change. ### insert [src/HashGrid.js:208-239](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L208-L239 "Source code on GitHub") Inserts a entry. #### Parameters * `entry` **[Entry](#entry)** * `bounds` **[Bounds](#bounds)** * `entryCache` **[EntryCache](#entrycache)** * `k1x` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** * `k1y` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** * `k2x` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** * `k2y` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** ### remove [src/HashGrid.js:245-257](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L245-L257 "Source code on GitHub") Removes a entry. #### Parameters * `entryCache` **[EntryCache](#entrycache)** ### every [src/HashGrid.js:268-301](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/HashGrid.js#L268-L301 "Source code on GitHub") Iterates entries that may overlap with bounds. Cancellable. Similar to Array.every() #### Parameters * `bounds` **([Bounds](#bounds) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))** * `call` **[EveryCallback](#everycallback)** * `QID` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** ## TreeBucket [src/TreeBucket.js:31-221](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L31-L221 "Source code on GitHub") TreeBucket. The class that actually contains the data ### Parameters * `bucketX` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `bucketY` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** * `bucketSize` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** ### updateQuadCache [src/TreeBucket.js:64-76](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L64-L76 "Source code on GitHub") Update QuadCache with appropriate child buckets. ### add [src/TreeBucket.js:81-84](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L81-L84 "Source code on GitHub") Increments a counter and propagates it upwards. ### subtract [src/TreeBucket.js:89-92](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L89-L92 "Source code on GitHub") Decrements a counter and propagates it upwards. ### getQuad [src/TreeBucket.js:99-135](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L99-L135 "Source code on GitHub") Returns the quads that collide with the bounding box. Returns -1 if bounds is completely enclosing bucket. #### Parameters * `bounds` **[Bounds](#bounds)** Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** ### \_every [src/TreeBucket.js:145-153](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L145-L153 "Source code on GitHub") Internal method that iterates through the items contained in the bucket while filtering non-unique entries. Similar to Array.every(); #### Parameters * `call` **[EveryCallback](#everycallback)** * `QID` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** ### every [src/TreeBucket.js:162-173](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L162-L173 "Source code on GitHub") Recursive method that iterates through entries that may collide with the specified bounds. #### Parameters * `bounds` **[Bounds](#bounds)** * `call` **[EveryCallback](#everycallback)** * `QID` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** ### everyAll [src/TreeBucket.js:181-189](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L181-L189 "Source code on GitHub") Recursive method that iterates through all entries contained in this bucket and its children. #### Parameters * `call` **[EveryCallback](#everycallback)** * `QID` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** ### remove [src/TreeBucket.js:196-207](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L196-L207 "Source code on GitHub") Removes a entry #### Parameters * `entryCache` **[EntryCache](#entrycache)** * `indexKey` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** ### set [src/TreeBucket.js:215-220](https://andrews54757@github.com/AJS-development/HashBounds/blob/340acee586495137485ad37ab378f2a2ad178c8c/src/TreeBucket.js#L215-L220 "Source code on GitHub") Sets a entry #### Parameters * `entry` **[Entry](#entry)** * `entryCache` **[EntryCache](#entrycache)** * `indexKey` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**