summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2021-04-06 23:44:30 +0200
committerAki <please@ignore.pl>2021-04-06 23:44:30 +0200
commit2dff3184ba302216ce89fb4ca2b5581e471bbdce (patch)
tree1f9f601041d4bbc6f314b8379280597bc5ec3da9
parent979720102747b06de7bede6215f042462bd88525 (diff)
downloadderelict-prototype-2dff3184ba302216ce89fb4ca2b5581e471bbdce.zip
derelict-prototype-2dff3184ba302216ce89fb4ca2b5581e471bbdce.tar.gz
derelict-prototype-2dff3184ba302216ce89fb4ca2b5581e471bbdce.tar.bz2
Refactored clustering
-rw-r--r--derelict.js35
1 files changed, 18 insertions, 17 deletions
diff --git a/derelict.js b/derelict.js
index 9a28f07..739bbfa 100644
--- a/derelict.js
+++ b/derelict.js
@@ -85,24 +85,25 @@ function loadWreckIcon() {
})
}
+function vec3FromXYZ({x, y, z}) {
+ return new THREE.Vector3(x, y, z)
+}
+
+function splitKillmails(clusters, killmail) {
+ const vec3 = vec3FromXYZ(killmail.victim.position)
+ const found = clusters.find(cluster => cluster[0].victim.position.distanceTo(vec3) < 100 * SCALE)
+ killmail.victim.position = vec3
+ if (found === undefined) {
+ clusters.push([killmail])
+ }
+ else {
+ found.push(killmail)
+ }
+ return clusters
+}
+
function processKillmails(grid, killmails, icon) {
- let clusters = []
- killmails.forEach(km => {
- const pos = km.victim.position
- km.victim.position = new THREE.Vector3(pos.x, pos.y, pos.z)
- const vec3 = km.victim.position
- let added = false
- for (const cluster of clusters) {
- if (cluster[0].victim.position.distanceTo(vec3) < 100 * SCALE) {
- cluster.push(km)
- added = true
- break
- }
- }
- if (!added) {
- clusters.push([km])
- }
- })
+ let clusters = killmails.reduce(splitKillmails, new Array())
let center = new THREE.Vector3()
let positions = clusters[0].map(km => km.victim.position)
positions.forEach(pos => center.add(new THREE.Vector3(pos.x, pos.y, pos.z)))