// This is just for testing new data after capture
"use strict";
var datastorm = datastorm || {};
datastorm.protocol1 = (function(){
var my = {};
var width = document.body.clientWidth;
var height = document.body.clientHeight;
var color = d3.scale.category20();
var xScale = d3.scale.linear().domain([-1.5, 2]).range([width, 0]);
var yScale = d3.scale.linear().domain([-1.5, 1.5]).range([height, 0]);
var ctx = datastorm.canvas.ctx;
var frameData;
var currentFrame, currentFrameNum = 0;
var startTs;
var intervalTimer;
function render() {
if(!currentFrame) return;
var triangles0 = datastorm.util.getTrianglesOfSkeleton(currentFrame, 0);
var triangles1 = datastorm.util.getTrianglesOfSkeleton(currentFrame, 1);
var triangles = triangles0.concat(triangles1);
ctx.fillStyle = "rgba(0, 0, 0, .1)";
ctx.fillRect(0, 0, width, height);
_.each(triangles, function(triangle, index) {
ctx.fillStyle = "rgba(200, 255, 255, 0.3)";
// ctx.fillStyle = 'lightblue';
ctx.beginPath();
_.each(triangle, function(vertex) {
var x = xScale(vertex.X);
var y = yScale(vertex.Y);
ctx.lineTo(x, y);
});
ctx.fill();
});
// Draw head(s)
_.each(currentFrame.Skeletons, function(sk) {
_.each(sk.Joints, function(j) {
if(j.JointType !== 'Head')
return;
// ctx.fillStyle = color(15);
var x = xScale(j.Position.X);
var y = yScale(j.Position.Y);
datastorm.canvas.drawCircle(x, y, 18);
});
});
}
function doFrame() {
getFrame();
render();
// console.log(currentFrame);
}
function getFrame() {
var numFrames = frameData.length;
my.ts = Date.now() - startTs;
for(var i = currentFrameNum + 1; i < numFrames; i++) {
if(frameData[i].TimeStamp > my.ts) {
currentFrame = frameData[i-1];
currentFrameNum = i-1;
return;
}
}
// End of data: do nothing
return;
}
// API
// my.render = render;
my.init = function() {
d3.json('https://d28qoto45d39ov.cloudfront.net/datastorm/visualisations/protocol1/data/protocol.json?v4', function(err, json) {
frameData = json;
console.log(frameData);
});
}
my.start = function() {
startTs = Date.now();
intervalTimer = setInterval(doFrame, 100);
}
my.stop = function() {
clearInterval(intervalTimer);
}
return my;
}());
datastorm.protocol1.init();
datastorm.protocol1.start();
See the Pen Datastorm - Protocol by Genevieve Smith-Nunes (@readysaltedcode) on CodePen.