grid-apps-cmms/src/mode/cam/animate.js

75 lines
2.2 KiB
JavaScript
Raw Normal View History

2020-11-24 00:11:49 -05:00
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict";
kiri.loader.push(function() {
2020-11-24 00:11:49 -05:00
let KIRI = self.kiri,
BASE = self.base,
CAM = KIRI.driver.CAM,
PRO = CAM.process,
newPolygon = BASE.newPolygon,
newPoint = BASE.newPoint;
if (KIRI.client)
2020-11-24 00:11:49 -05:00
CAM.animate = function(API) {
2020-11-24 00:48:45 -05:00
KIRI.client.animate(API.conf.get(), data => {
const { ind, pos } = data;
2020-11-24 00:11:49 -05:00
2020-11-24 00:48:45 -05:00
const geo = new THREE.BufferGeometry();
geo.setAttribute('position', new THREE.BufferAttribute(pos, 3));
geo.setIndex(new THREE.BufferAttribute(new Uint16Array(ind), 1));
const mat = new THREE.LineBasicMaterial({
transparent: true,
opacity: 0.75,
color: 0
});
const seg = new THREE.LineSegments(geo, mat);
2020-11-24 00:11:49 -05:00
2020-11-24 00:48:45 -05:00
API.const.SPACE.platform.world.add(seg);
});
};
if (KIRI.client)
KIRI.client.animate = function(settings, ondone) {
send("animate", {settings}, reply => {
ondone(reply);
});
};
if (KIRI.worker)
KIRI.worker.animate = function(data, send) {
console.log({current});
const { settings } = data;
const stock = settings.stock;
const center = stock.center;
const step = 1;
const stepsX = Math.floor(stock.x / step) + 1;
const stepsY = Math.floor(stock.y / step) + 1;
2020-11-24 00:11:49 -05:00
const gridPoints = stepsX * stepsY;
const pos = new Float32Array(gridPoints * 3);
const ind = [];
const ox = stock.x / 2;
const oy = stock.y / 2;
2020-11-24 00:11:49 -05:00
// initialize grid points
for (let x=0, ai=0; x<stepsX; x++) {
for (let y=0; y<stepsY; y++) {
pos[ai++] = x * step - ox;
pos[ai++] = y * step - oy;
pos[ai++] = stock.z;
if (y > 0) ind.appendAll([
(stepsY * x) + (y - 1),
(stepsY * x) + (y )
]);
if (x > 0) ind.appendAll([
(stepsY * (x - 1)) + y,
(stepsY * (x )) + y
]);
}
}
2020-11-24 00:48:45 -05:00
send.done({ pos, ind });
2020-11-24 00:11:49 -05:00
};
});