flow: perf

This commit is contained in:
cha0s 2019-05-02 08:39:52 -05:00
parent b8fb92f961
commit 7ccb89226c

View File

@ -5,7 +5,10 @@ import * as Rectangle from './rectangle';
export class QuadTree { export class QuadTree {
constructor() { constructor() {
this._visitNodes = [];
this._queryRectangle = [0, 0, 0, 0];
this.quadTree = quadtree(); this.quadTree = quadtree();
this.onVisit = this.onVisit.bind(this);
} }
add(datum) { add(datum) {
@ -20,28 +23,31 @@ export class QuadTree {
} }
} }
remove(datum) { onVisit(node, x, y, x0, y0) {
this.quadTree.remove(datum);
}
search(queryRectangle) {
const nodes = [];
this.quadTree.visit((node, x, y, x0, y0) => {
const w = x0 - x; const w = x0 - x;
const h = y0 - y; const h = y0 - y;
if (!Rectangle.intersects(queryRectangle, [x, y, w, h])) { if (!Rectangle.intersects(this._queryRectangle, [x, y, w, h])) {
return true; return true;
} }
if (4 === node.length) { if (4 === node.length) {
return; return;
} }
do { do {
if (Rectangle.intersects(queryRectangle, node.data)) { if (Rectangle.isTouching(this._queryRectangle, node.data)) {
nodes.push(node); this.nodes.push(node);
} }
} while (node = node.next); } while (node = node.next);
}); }
return nodes;
remove(datum) {
this.quadTree.remove(datum);
}
search(queryRectangle) {
this._queryRectangle = queryRectangle;
this.nodes = [];
this.quadTree.visit(this.onVisit);
return this.nodes;
} }
} }