+\r
+ /**\r
+ * Prevent context menu while blowing wind\r
+ */\r
+ canvas.addEventListener('contextmenu', function(evt) { \r
+ evt.preventDefault();\r
+ }, false);\r
+\r
+ /** register key events */\r
+ document.onkeydown = (evt) => {\r
+ if (evt.code === "KeyW")\r
+ windKeyDown = true;\r
+ if (evt.code === "KeyD")\r
+ dragKeyDown = true;\r
+ };\r
+\r
+ document.onkeyup = (evt) => {\r
+ if (evt.code === "KeyW")\r
+ windKeyDown = false;\r
+ if (evt.code === "KeyD") {\r
+ dragKeyDown = false;\r
+ draggedIndex = -1;\r
+ }\r
+ };\r
+\r
+ /** helper function to turn mouse position into 3D coordinates */\r
+ function calculateMousePosToWorld(mousePos){\r
+ var vec = new THREE.Vector3(); // create once and reuse\r
+ var pos = new THREE.Vector3(); // create once and reuse\r
+\r
+ vec.set(\r
+ (mousePos.x / window.innerWidth) * 2 - 1,\r
+ - (mousePos.y / window.innerHeight) * 2 + 1,\r
+ 0.5);\r
+\r
+ vec.unproject(camera);\r
+\r
+ vec.sub(camera.position).normalize();\r
+\r
+ var distance = - camera.position.z / vec.z;\r
+\r
+ pos.copy(camera.position).add(vec.multiplyScalar(distance));\r
+ return pos;\r
+ }\r