aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/claim.js4
-rw-r--r--tools/search.js23
2 files changed, 21 insertions, 6 deletions
diff --git a/tools/claim.js b/tools/claim.js
index 721c5ad..b43417b 100644
--- a/tools/claim.js
+++ b/tools/claim.js
@@ -5,7 +5,7 @@ const ri = require('../utils/rectintersect');
const vec = require('../utils/vec');
const comb = require('../utils/comb');
-module.exports = function(catchall){
+module.exports = function(){
// catchall is called if tileUpdate occurs w/ no relevant claim on a part.
let claims = {};
let claimId = 0;
@@ -44,6 +44,6 @@ module.exports = function(catchall){
}
claim.call(send, diffspace, rellocs, id, claim.space, claim.area); // claim.space should not be modified by the function. it is only present to make functions easier to write
}
- catchall(send, tilespaces, locs);
+ this.emit('fallback', send, tilespaces, locs);
}
}
diff --git a/tools/search.js b/tools/search.js
index 7f681f0..78e0ee7 100644
--- a/tools/search.js
+++ b/tools/search.js
@@ -12,11 +12,13 @@ function getComp(index){
return (element,needle) => (element[index] - needle[index] || element[1-index] - needle[1-index])
}
-function Search(searchBlock){ // searchBlock should be a Space object.
+function Search(){ // searchBlock should be a Space object.
this.tiles = {}; // Object which stores Spaces.
this.sort = [[],[]]; // Vertically/horizontally sorted list of tiles for fast addition, deletion, and searching
+ this.spaces = [];
+ this.calls = [];
- this.add = function(loc, space){ // loc should be [tileY,tileX] and space Space.
+ this.add = function(loc, space, send){ // loc should be [tileY,tileX] and space Space.
this.tiles[loc] = space;
let inds = Array(2); // Records horizontal and vertical indices for insertion. Then actually inserts the item.
[0,1].forEach( ind => { // ind chooses y-or-x
@@ -29,8 +31,10 @@ function Search(searchBlock){ // searchBlock should be a Space object.
block.forEach( (tile) => {
searchspace.comb( this.tiles[tile], comb.add );
});
- coords = searchspace.search(searchBlock); // According to space docs, [] on failure and a character location on success
- return vec.add(coords, searchspace.loc);
+ for (let i=0; i<this.spaces.length; i++){
+ let coords = searchspace.search(this.spaces[i]);
+ if (coords.length) this.calls[i](vec.add(coords, searchspace.loc), send, searchspace);
+ }
}
this.block = function(loc,inds,exclude){
@@ -79,6 +83,17 @@ function Search(searchBlock){ // searchBlock should be a Space object.
else this.add(tile, tiles[tile]);
}
}
+
+ this.match = function(space, call){
+ this.spaces.push(space);
+ this.calls.push(call);
+ }
+
+ this.unmatch = function(space){
+ let ind = this.spaces.indexOf(space);
+ this.spaces.splice(ind, 1);
+ this.calls.splice(ind, 1);
+ }
}
module.exports = Search;