UNPKG

awv3

Version:
1 lines 6.29 kB
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}exports.__esModule=!0;var _keys=require("babel-runtime/core-js/object/keys"),_keys2=_interopRequireDefault(_keys),_getIterator2=require("babel-runtime/core-js/get-iterator"),_getIterator3=_interopRequireDefault(_getIterator2),_classCallCheck2=require("babel-runtime/helpers/classCallCheck"),_classCallCheck3=_interopRequireDefault(_classCallCheck2),_three=require("three"),_three2=_interopRequireDefault(_three),_raycaster=require("../three/raycaster"),_raycaster2=_interopRequireDefault(_raycaster),_object=require("../three/object3"),_object2=_interopRequireDefault(_object),Interaction=function(){function e(){var t=arguments.length<=0||void 0===arguments[0]?Error.log("View undefined"):arguments[0],i=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];(0,_classCallCheck3["default"])(this,e),this.view=t,this.canvas=t.canvas,this.raycaster=new _raycaster2["default"](this),this.enabled="undefined"==typeof i.enabled||i.enabled,this.targets=[],this.intersects=[],this.hits={},this.hitsArray=[],this.actions={},this.actionsArray=[],this.hovered={},this.filter=void 0,this.coordinates=new _three2["default"].Vector3(0,0,0),this.click=new _three2["default"].Vector3(0,0,0),this.delta=0}return e.prototype.update=function(){if(this.enabled)for(var e=this.targets,t=Array.isArray(e),i=0,e=t?e:(0,_getIterator3["default"])(e);;){var r;if(t){if(i>=e.length)break;r=e[i++]}else{if(i=e.next(),i.done)break;r=i.value}var s=r;s.interaction&&s.interaction.enabled&&(this.view.invalidateFrames>0||this.view.renderAlways||this.view.controls.inMotion||this.view.controlsHud.inMotion)&&s.emit(_object2["default"].Events.Lifecycle.Rendered)}},e.prototype.onMouseMove=function(e){var t=this;if(this.enabled&&(!this.view.input.mouse.down||0!=this.actionsArray.length)){if(this.coordinates.set(e.offsetX/this.view.width*2-1,2*-(e.offsetY/this.view.height)+1,1),this.delta=Math.max(this.delta,Math.abs(this.click.x-this.coordinates.x)+Math.abs(this.click.y-this.coordinates.y)),this.intersects=[],this.targets.length>0){if(this.raycaster.castObjects(this.coordinates,this.view.camera,this.targets,this.intersects,this.filter),this.intersects.length>0)for(var i={},r=this.intersects,s=Array.isArray(r),a=0,r=s?r:(0,_getIterator3["default"])(r);;){var n;if(s){if(a>=r.length)break;n=r[a++]}else{if(a=r.next(),a.done)break;n=a.value}var o=n;o.id=o.receiver.interaction.recursive?o.receiver.id+":"+o.object.id:o.receiver.id,i[o.id]||(o.first=o===this.intersects[0],o.time=this.canvas.renderer.time,o.receiver.interaction.first&&!o.first||this.hovered[o.id]||(this.hovered[o.id]=!0,o.receiver.emit(_object2["default"].Events.Interaction.Hovered,o),this.view.invalidate()),this.hits[o.id]=o,i[o.id]=!0)}else 0==this.actionsArray.length&&this.view.setCursor();this.hitsArray=(0,_keys2["default"])(this.hits).map(function(e){return t.hits[e]}).sort(function(e,t){return e.receiver.depthIndex-t.receiver.depthIndex}).filter(function(e){var i=e.receiver.interaction.first&&!e.first||e.time!=t.canvas.renderer.time;return i&&(t.hovered[e.id]&&!t.actions[e.id]&&(delete t.hovered[e.id],e.receiver.emit(_object2["default"].Events.Interaction.Unhovered,e),t.view.invalidate()),delete t.hits[e.id]),!i})}if(this.delta>.01&&(0,_keys2["default"])(this.actions).length>0)for(var h=this.actionsArray,c=Array.isArray(h),d=0,h=c?h:(0,_getIterator3["default"])(h);;){var l;if(c){if(d>=h.length)break;l=h[d++]}else{if(d=h.next(),d.done)break;l=d.value}var f=l;if(!f.receiver.interaction.first||f.first){var v=this.coordinates.clone().unproject(this.view.camera).sub(this.view.camera.position).normalize();f.drag=this.view.camera.position.clone().add(v.multiplyScalar(f.distance)).add(f.offset),f.receiver.emit(_object2["default"].Events.Interaction.Dragged,f),this.view.invalidate()}}}},e.prototype.onMouseOut=function(e){if(this.enabled)for(var t=this.hitsArray,i=Array.isArray(t),r=0,t=i?t:(0,_getIterator3["default"])(t);;){var s;if(i){if(r>=t.length)break;s=t[r++]}else{if(r=t.next(),r.done)break;s=r.value}var a=s;this.hovered[a.id]&&!this.actions[a.id]&&(delete this.hovered[a.id],a.receiver.emit(_object2["default"].Events.Interaction.Unhovered,a),this.view.invalidate()),delete this.hits[a.id]}},e.prototype.onMouseDown=function(e){if(this.enabled){this.delta=0,this.click.set(e.offsetX/this.view.width*2-1,2*-(e.offsetY/this.view.height)+1,1),this.actions={},this.actionsArray=[];for(var t=this.hitsArray,i=Array.isArray(t),r=0,t=i?t:(0,_getIterator3["default"])(t);;){var s;if(i){if(r>=t.length)break;s=t[r++]}else{if(r=t.next(),r.done)break;s=r.value}var a=s;if(!a.receiver.interaction.first||a.first){var n=a.receiver.parent?a.receiver.parent.localToWorld(a.receiver.position.clone()):a.receiver.position.clone();a.offset=n.sub(a.point.clone()),this.actions[a.id]=a,this.actionsArray.push(a),a.receiver.emit(_object2["default"].Events.Interaction.Picked,a)}}this.view.invalidate()}},e.prototype.onMouseUp=function(e){if(this.enabled){for(var t=this.actionsArray,i=Array.isArray(t),r=0,t=i?t:(0,_getIterator3["default"])(t);;){var s;if(i){if(r>=t.length)break;s=t[r++]}else{if(r=t.next(),r.done)break;s=r.value}var a=s;this.hovered[a.id]&&!this.hits[a.id]&&(delete this.hovered[a.id],a.receiver.emit(_object2["default"].Events.Interaction.Unhovered,a)),a.receiver.emit(_object2["default"].Events.Interaction.Dropped,a),this.delta<.05&&a.receiver.emit(_object2["default"].Events.Interaction.Clicked,a)}this.view.invalidate(),this.actions={},this.actionsArray=[]}},e.prototype.removeTarget=function(e){var t=this,i=this.targets.indexOf(e);i>-1&&this.targets.splice(i,1),i=this.hitsArray.indexOf(e),i>-1&&this.hitsArray.splice(i,1),i=this.actionsArray.indexOf(e),i>-1&&this.actionsArray.splice(i,1),(0,_keys2["default"])(this.hits).forEach(function(i){return t.hits[i].receiver===e&&delete t.hits[i]}),(0,_keys2["default"])(this.actions).forEach(function(i){return t.actions[i].receiver===e&&delete t.actions[i]}),(0,_keys2["default"])(this.hovered).forEach(function(i){return t.hovered[i].receiver===e&&delete t.hovered[i]})},e.prototype.getActions=function(){return this.actions},e.prototype.isHit=function(e){return this.hits[e.id]},e.prototype.isAction=function(e){return this.actions[e.id]},e}();exports["default"]=Interaction;