@midpoint68/pocket
Advanced tools
Comparing version 1.0.0 to 1.0.1
{ | ||
"name": "@midpoint68/pocket", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "A simple and efficient particle manager for JavaScript.", | ||
@@ -5,0 +5,0 @@ "main": "pocket.js", |
159
pocket.js
@@ -0,14 +1,14 @@ | ||
"use strict"; | ||
/*! | ||
* Copyright (c) Trevor Richard | ||
*/ | ||
var Particle = (function () { | ||
function Particle(_a) { | ||
var x = _a.x, y = _a.y, _b = _a.z, z = _b === void 0 ? 0 : _b, _c = _a.radius, radius = _c === void 0 ? 0 : _c, data = _a.data; | ||
class Particle { | ||
constructor({ x, y, z = 0, radius = 0, data }) { | ||
this.x = x; | ||
this.y = y; | ||
this.z = z; | ||
this.setRadius(radius); | ||
this.radius = this.setRadius(radius); | ||
this.data = data; | ||
} | ||
Particle.prototype.moveTo = function (position) { | ||
moveTo(position) { | ||
if (!position.z) | ||
@@ -23,18 +23,17 @@ position.z = 0; | ||
} | ||
}; | ||
Particle.prototype.setRadius = function (radius) { | ||
} | ||
setRadius(radius) { | ||
if (radius <= 0) | ||
throw new Error("Particle radius must be greater than zero."); | ||
this.radius = radius; | ||
}; | ||
Particle.prototype.retrieve = function () { | ||
return radius; | ||
} | ||
retrieve() { | ||
if (!this.subPocket) | ||
return undefined; | ||
return this.subPocket.retrieve(this); | ||
}; | ||
return Particle; | ||
}()); | ||
var SubPocket = (function () { | ||
function SubPocket(_a) { | ||
var parent = _a.parent, radius = _a.radius, position = _a.position; | ||
} | ||
} | ||
class SubPocket { | ||
constructor({ parent, radius, position }) { | ||
this.parent = parent; | ||
@@ -46,5 +45,5 @@ this.radius = radius; | ||
} | ||
SubPocket.prototype.put = function (p) { | ||
var diff = Pocket.Tools.sub(this.position, p); | ||
var dist = Pocket.Tools.mag(diff); | ||
put(p) { | ||
const diff = Pocket.Tools.sub(this.position, p); | ||
const dist = Pocket.Tools.mag(diff); | ||
if (dist + p.radius < this.radius) { | ||
@@ -57,8 +56,8 @@ if (p.radius >= this.radius / Pocket.Tools.MAGIC_RATIO) { | ||
else { | ||
for (var i = 0; i < this.pockets.length; i++) { | ||
var result = this.pockets[i].put(p); | ||
for (let i = 0; i < this.pockets.length; i++) { | ||
const result = this.pockets[i].put(p); | ||
if (result) | ||
return result; | ||
} | ||
var sp = new SubPocket({ | ||
const sp = new SubPocket({ | ||
parent: this, | ||
@@ -79,5 +78,5 @@ radius: this.radius / Pocket.Tools.MAGIC_RATIO, | ||
} | ||
}; | ||
SubPocket.prototype.retrieve = function (p) { | ||
this.particles = this.particles.filter(function (p) { return p != p; }); | ||
} | ||
retrieve(p) { | ||
this.particles = this.particles.filter(p => p != p); | ||
if (this.pockets.length == 0 && this.particles.length == 0) { | ||
@@ -87,18 +86,18 @@ this.parent.remove(this); | ||
return p; | ||
}; | ||
SubPocket.prototype.remove = function (sp) { | ||
this.pockets = this.pockets.filter(function (p) { return p != sp; }); | ||
} | ||
remove(sp) { | ||
this.pockets = this.pockets.filter(p => p != sp); | ||
if (this.pockets.length == 0 && this.particles.length == 0) { | ||
this.parent.remove(this); | ||
} | ||
}; | ||
SubPocket.prototype.search = function (radius, center) { | ||
} | ||
search(radius, center) { | ||
var found = new Array(); | ||
var diff = Pocket.Tools.sub(this.position, center); | ||
var dist = Pocket.Tools.mag(diff); | ||
const diff = Pocket.Tools.sub(this.position, center); | ||
const dist = Pocket.Tools.mag(diff); | ||
if (dist - radius < this.radius) { | ||
for (var i = 0; i < this.particles.length; i++) { | ||
var p = this.particles[i]; | ||
var p_diff = Pocket.Tools.sub(p, center); | ||
var p_dist = Pocket.Tools.mag(p_diff); | ||
for (let i = 0; i < this.particles.length; i++) { | ||
const p = this.particles[i]; | ||
const p_diff = Pocket.Tools.sub(p, center); | ||
const p_dist = Pocket.Tools.mag(p_diff); | ||
if (p_dist - radius < p.radius) { | ||
@@ -108,3 +107,3 @@ found.push(p); | ||
} | ||
for (var i = 0; i < this.pockets.length; i++) { | ||
for (let i = 0; i < this.pockets.length; i++) { | ||
found = found.concat(this.pockets[i].search(radius, center)); | ||
@@ -114,18 +113,17 @@ } | ||
return found; | ||
}; | ||
return SubPocket; | ||
}()); | ||
var Pocket = (function () { | ||
function Pocket() { | ||
} | ||
} | ||
class Pocket { | ||
constructor() { | ||
this.root = undefined; | ||
} | ||
Pocket.prototype.put = function (particle) { | ||
put(particle) { | ||
particle.pocket = this; | ||
if (this.root) { | ||
var result_1 = this.root.put(particle); | ||
if (result_1) | ||
return result_1; | ||
const result = this.root.put(particle); | ||
if (result) | ||
return result; | ||
} | ||
var sp_radius = Pocket.Tools.MAGIC_RATIO * particle.radius; | ||
var sp = new SubPocket({ | ||
const sp_radius = Pocket.Tools.MAGIC_RATIO * particle.radius; | ||
const sp = new SubPocket({ | ||
parent: this, | ||
@@ -143,4 +141,4 @@ radius: this.root ? Math.max(this.root.radius, sp_radius) : sp_radius, | ||
else { | ||
var max_dist = Pocket.Tools.mag(Pocket.Tools.sub(this.root.position, sp.position)) + sp.radius; | ||
var new_root = new SubPocket({ | ||
const max_dist = Pocket.Tools.mag(Pocket.Tools.sub(this.root.position, sp.position)) + sp.radius; | ||
const new_root = new SubPocket({ | ||
parent: this, | ||
@@ -156,3 +154,3 @@ radius: Pocket.Tools.MAGIC_RATIO * max_dist, | ||
} | ||
var result = sp.put(particle); | ||
const result = sp.put(particle); | ||
if (!result) { | ||
@@ -162,9 +160,9 @@ throw new Error("Result expected for put call..."); | ||
return result; | ||
}; | ||
Pocket.prototype.remove = function (sp) { | ||
} | ||
remove(sp) { | ||
if (sp == this.root) { | ||
this.root = undefined; | ||
} | ||
}; | ||
Pocket.prototype.search = function (radius, center) { | ||
} | ||
search(radius, center) { | ||
if (!center.z) | ||
@@ -178,4 +176,4 @@ center.z = 0; | ||
} | ||
}; | ||
Pocket.prototype.closest = function (position, startRadius) { | ||
} | ||
closest(position, startRadius) { | ||
if (!position.z) | ||
@@ -186,10 +184,10 @@ position.z = 0; | ||
startRadius = this.root.radius / 100; | ||
for (var r = startRadius; r < this.root.radius * 2; r *= 2) { | ||
var pool = this.root.search(r, position); | ||
for (let r = startRadius; r < this.root.radius * 2; r *= 2) { | ||
const pool = this.root.search(r, position); | ||
if (pool.length > 0) { | ||
var closest = pool[0]; | ||
var dist = Pocket.Tools.mag(Pocket.Tools.sub(closest, position)); | ||
for (var i = 1; i < pool.length; i++) { | ||
var p = pool[i]; | ||
var p_dist = Pocket.Tools.mag(Pocket.Tools.sub(p, position)); | ||
let closest = pool[0]; | ||
let dist = Pocket.Tools.mag(Pocket.Tools.sub(closest, position)); | ||
for (let i = 1; i < pool.length; i++) { | ||
const p = pool[i]; | ||
const p_dist = Pocket.Tools.mag(Pocket.Tools.sub(p, position)); | ||
if (p_dist < dist) { | ||
@@ -205,22 +203,21 @@ closest = p; | ||
return undefined; | ||
}; | ||
Pocket.prototype.all = function () { | ||
} | ||
all() { | ||
if (!this.root) | ||
return new Array(); | ||
return this.search(this.root.radius, this.root.position); | ||
}; | ||
Pocket.Tools = { | ||
MAGIC_RATIO: 1.9, | ||
sub: function (v0, v1) { | ||
return { | ||
x: v0.x - v1.x, | ||
y: v0.y - v1.y, | ||
z: v0.z - v1.z | ||
}; | ||
}, | ||
mag: function (v) { | ||
return Math.sqrt(Math.pow(Math.sqrt(v.x * v.x + v.y * v.y), 2) + v.z * v.z); | ||
} | ||
}; | ||
return Pocket; | ||
}()); | ||
} | ||
} | ||
Pocket.Tools = { | ||
MAGIC_RATIO: 1.9, | ||
sub: (v0, v1) => { | ||
return { | ||
x: v0.x - v1.x, | ||
y: v0.y - v1.y, | ||
z: (v0.z || 0) - (v1.z || 0) | ||
}; | ||
}, | ||
mag: (v) => { | ||
return Math.sqrt(Math.pow(Math.sqrt(v.x * v.x + v.y * v.y), 2) + (v.z || 0) * (v.z || 0)); | ||
} | ||
}; |
@@ -8,3 +8,3 @@ /*! | ||
y: number | ||
z: number | ||
z?: number | ||
} | ||
@@ -38,3 +38,3 @@ | ||
this.z = z; | ||
this.setRadius(radius); | ||
this.radius = this.setRadius(radius); | ||
this.data = data; | ||
@@ -67,2 +67,3 @@ } | ||
this.radius = radius; | ||
return radius; | ||
} | ||
@@ -217,7 +218,7 @@ | ||
y: v0.y - v1.y, | ||
z: v0.z - v1.z | ||
z: (v0.z || 0) - (v1.z || 0) | ||
}; | ||
}, | ||
mag: (v: Vector) => { | ||
return Math.sqrt(Math.pow(Math.sqrt(v.x * v.x + v.y * v.y), 2) + v.z * v.z); | ||
return Math.sqrt(Math.pow(Math.sqrt(v.x * v.x + v.y * v.y), 2) + (v.z || 0) * (v.z || 0)); | ||
} | ||
@@ -224,0 +225,0 @@ }; |
{ | ||
"compilerOptions": { | ||
"module": "none", | ||
"target": "ES6", | ||
"noImplicitAny": true, | ||
"removeComments": true, | ||
"sourceMap": false, | ||
"outFile": "pocket.js" | ||
"outFile": "pocket.js", | ||
"strict": true, | ||
}, | ||
@@ -9,0 +11,0 @@ "files": [ |
32237