aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorHolden Rohrer <hr@hrhr.dev>2020-01-29 23:49:17 -0500
committerHolden Rohrer <hr@hrhr.dev>2020-01-29 23:49:17 -0500
commit0e2883105e948ff6f35f954f8184fdd232d17a97 (patch)
tree7764d8b8aa770ddb836cb8a2dc7c580441437969 /tools
parentdf56e8a4c6b05e9f2f5c98c14af3f95a7bc6926c (diff)
parent1cc310e20dda4a378aac76b49288e6c8e2361e5e (diff)
Merge branch 'socket'
Made the socket object used by jarvis a singleton MetaSocket object to maintain clean, modular code standards. This also means that future feature addition will be easier because all references are to one object, of which the behavior can be easily changed since most systems rely on EventEmitter or callback-style structures
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;