UNPKG

awv3

Version:
1 lines 6.67 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 a=r;a.interaction&&a.interaction.enabled&&(this.view.invalidateFrames>0||this.view.renderAlways||this.view.controls.inMotion||this.view.controlsHud.inMotion)&&a.emit(_object2.default.Events.Lifecycle.Rendered)}},e.prototype.onMouseMove=function(e){var t=this;if(this.enabled&&(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.view.input.mouse.down||0!=this.actionsArray.length)){if(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,a=Array.isArray(r),s=0,r=a?r:(0,_getIterator3.default)(r);;){var n;if(a){if(s>=r.length)break;n=r[s++]}else{if(s=r.next(),s.done)break;n=s.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 c=this.actionsArray,h=Array.isArray(c),d=0,c=h?c:(0,_getIterator3.default)(c);;){var l;if(h){if(d>=c.length)break;l=c[d++]}else{if(d=c.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 a;if(i){if(r>=t.length)break;a=t[r++]}else{if(r=t.next(),r.done)break;a=r.value}var s=a;this.hovered[s.id]&&!this.actions[s.id]&&(delete this.hovered[s.id],s.receiver.emit(_object2.default.Events.Interaction.Unhovered,s),this.view.invalidate()),delete this.hits[s.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 a;if(i){if(r>=t.length)break;a=t[r++]}else{if(r=t.next(),r.done)break;a=r.value}var s=a;if(!s.receiver.interaction.first||s.first){var n=s.receiver.parent?s.receiver.parent.localToWorld(s.receiver.position.clone()):s.receiver.position.clone();s.offset=n.sub(s.point.clone()),this.actions[s.id]=s,this.actionsArray.push(s),s.receiver.emit(_object2.default.Events.Interaction.Picked,s)}}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 a;if(i){if(r>=t.length)break;a=t[r++]}else{if(r=t.next(),r.done)break;a=r.value}var s=a;this.hovered[s.id]&&!this.hits[s.id]&&(delete this.hovered[s.id],s.receiver.emit(_object2.default.Events.Interaction.Unhovered,s)),s.receiver.emit(_object2.default.Events.Interaction.Dropped,s),this.delta<.05&&s.receiver.emit(_object2.default.Events.Interaction.Clicked,s)}if(0==this.actionsArray.length&&this.delta<.05)for(var n=this.targets,o=Array.isArray(n),c=0,n=o?n:(0,_getIterator3.default)(n);;){var h;if(o){if(c>=n.length)break;h=n[c++]}else{if(c=n.next(),c.done)break;h=c.value}var d=h;d.emit(_object2.default.Events.Interaction.Missed)}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),this.hitsArray.forEach(function(i){return i.receiver===e&&t.hitsArray.splice(t.hitsArray.indexOf(i),1)}),this.actionsArray.forEach(function(i){return i.receiver===e&&t.actionsArray.splice(t.actionsArray.indexOf(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.actionsArray},e.prototype.isHit=function(e){return this.hitsArray.find(function(t){return t.object.id==e.id})},e.prototype.isAction=function(e){return this.actionsArray.find(function(t){return t.object.id==e.id})},e}();exports.default=Interaction;