flow: perf
This commit is contained in:
parent
b8fb92f961
commit
7ccb89226c
|
@ -5,7 +5,10 @@ import * as Rectangle from './rectangle';
|
|||
export class QuadTree {
|
||||
|
||||
constructor() {
|
||||
this._visitNodes = [];
|
||||
this._queryRectangle = [0, 0, 0, 0];
|
||||
this.quadTree = quadtree();
|
||||
this.onVisit = this.onVisit.bind(this);
|
||||
}
|
||||
|
||||
add(datum) {
|
||||
|
@ -20,28 +23,31 @@ export class QuadTree {
|
|||
}
|
||||
}
|
||||
|
||||
onVisit(node, x, y, x0, y0) {
|
||||
const w = x0 - x;
|
||||
const h = y0 - y;
|
||||
if (!Rectangle.intersects(this._queryRectangle, [x, y, w, h])) {
|
||||
return true;
|
||||
}
|
||||
if (4 === node.length) {
|
||||
return;
|
||||
}
|
||||
do {
|
||||
if (Rectangle.isTouching(this._queryRectangle, node.data)) {
|
||||
this.nodes.push(node);
|
||||
}
|
||||
} while (node = node.next);
|
||||
}
|
||||
|
||||
remove(datum) {
|
||||
this.quadTree.remove(datum);
|
||||
}
|
||||
|
||||
search(queryRectangle) {
|
||||
const nodes = [];
|
||||
this.quadTree.visit((node, x, y, x0, y0) => {
|
||||
const w = x0 - x;
|
||||
const h = y0 - y;
|
||||
if (!Rectangle.intersects(queryRectangle, [x, y, w, h])) {
|
||||
return true;
|
||||
}
|
||||
if (4 === node.length) {
|
||||
return;
|
||||
}
|
||||
do {
|
||||
if (Rectangle.intersects(queryRectangle, node.data)) {
|
||||
nodes.push(node);
|
||||
}
|
||||
} while (node = node.next);
|
||||
});
|
||||
return nodes;
|
||||
this._queryRectangle = queryRectangle;
|
||||
this.nodes = [];
|
||||
this.quadTree.visit(this.onVisit);
|
||||
return this.nodes;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user