IT IS THE FUTURE. THE DISTANT FUTURE.
I have no idea what I'm doing here. This was a sketch that I made years and years ago, but I thought I would use it as a text for bl.ocks.org because it looks dope af to me right now.
<!doctype html> | |
<html> | |
<head> | |
<title>ROBOT ARM</title> | |
</head> | |
<body> | |
<script src="https://admiralpotato.github.io/js/npos3d/build/npos3d.js"></script> | |
<script> | |
var n = NPos3d; | |
var scene = new n.Scene(); | |
var segmentDisplay = new n.Ob3D({ | |
shape: { | |
points: [ | |
[-200,-100,0], | |
[-200,100,0], | |
[-100,-100,0], | |
[-100,100,0], | |
[0,-100,0], | |
[0,100,0], | |
[100,-100,0], | |
[100,100,0], | |
[200,-100,0], | |
[200,100,0], | |
], | |
lines: [ | |
[0,1], | |
[2,3], | |
[4,5], | |
[6,7], | |
[8,9], | |
] | |
} | |
}); | |
var myOb = new n.Ob3D(); | |
var upperArm = new n.VText({ | |
textAlign: 'left', | |
string: 'upperArm', | |
rot: [0,0,deg * -90], | |
pos: [0,200,0] | |
}); | |
var foreArm = new n.VText({ | |
textAlign: 'left', | |
string: 'foreArm', | |
rot: [0,0,deg * 90], | |
pos: [208,0,0] | |
}); | |
var wrist = new n.VText({ | |
string: 'wrist', | |
rot: [0,0,deg * 90], | |
pos: [192,0,0] | |
}); | |
var index = new n.VText({ | |
textAlign: 'left', | |
string: 'index', | |
rot: [0,0,deg * -90], | |
pos: [-64,-8,0] | |
}); | |
var thumb = new n.VText({ | |
textAlign: 'left', | |
string: 'thumb', | |
rot: [0,0,deg * -90], | |
pos: [64,-8,0] | |
}); | |
scene.add(segmentDisplay); | |
scene.add(myOb); | |
scene.add(upperArm); | |
upperArm.add(foreArm); | |
foreArm.add(wrist); | |
wrist.add(index); | |
wrist.add(thumb); | |
var keyList = []; | |
keyList[32] = 'space'; | |
keyList[38] = 'up'; | |
keyList[40] = 'down'; | |
keyList[37] = 'left'; | |
keyList[39] = 'right'; | |
keyList[49] = 'one'; | |
keyList[50] = 'two'; | |
keyList[51] = 'three'; | |
keyList[52] = 'four'; | |
keyList[87] = 'w'; | |
keyList[83] = 's'; | |
keyList[65] = 'a'; | |
keyList[68] = 'd'; | |
keyList[70] = 'f'; | |
var kb = {}; | |
var setKey = function (e){ | |
//console.log(e.keyCode); | |
if(e.type == 'keyup'){val = false;} | |
else{val = true;} | |
if(keyList[e.keyCode]){ | |
kb[keyList[e.keyCode]] = val; | |
} | |
} | |
window.addEventListener('keydown', setKey, false); | |
window.addEventListener('keyup', setKey, false); | |
var deg90 = deg * 90; | |
var lastX = 0; | |
var lastY = 0; | |
var sceneControl = { | |
update: function() { | |
var x = scene.mpos.x - lastX, | |
y = scene.mpos.y - lastY; | |
lastX = scene.mpos.x; | |
lastY = scene.mpos.y; | |
myOb.pos[0] = x; | |
myOb.pos[1] = y; | |
if(kb.a){ | |
upperArm.rot[1] += deg * 0.5 * y; | |
} | |
else if(kb.s){ | |
foreArm.rot[2] += deg * 0.5 * y; | |
} | |
else if(kb.d){ | |
wrist.rot[0] += deg * 0.5 * y; | |
} | |
else if(kb.f){ | |
index.rot[2] += deg * 0.5 * y; | |
thumb.rot[2] += -deg * 0.5 * y; | |
} | |
myOb.pos[0] = scene.mpos.x; | |
myOb.pos[1] = scene.mpos.y; | |
myOb.color = 'hsl(' + Math.round(myOb.rot[1] / deg) + ', 100%, 50%)'; | |
} | |
}; | |
scene.add(sceneControl); | |
</script> | |
</body> | |
</html> |