{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/src/interaction/tool.js"],"names":["Input","Vector2","ToolEvent","mini","Class","subclass","initialize","tool","setScreenPosition","pos","_position","setLastScreenPosition","_lastPosition","setDownScreenPosition","_downPosition","getScreenPosition","getLastScreenPosition","getDownScreenPosition","getLastScreenMiddlePoint","position","lastPosition","add","mulFloat","getDownScreenMiddlePoint","downPosition","_transformToViewport","vector","viewport","worldPos","screenToWorldCoordinates","getPositionInWorld","getLastPositionInWorld","getDownPositionInWorld","getLastMiddlePointInWorld","positionInWorld","lastPositionInWorld","getDownMiddlePointInWorld","downPositionInWorld","getLastDelta","sub","getDownDelta","getLastDeltaInWorld","getDownDeltaInWorld","getLastDistance","distance","getDownDistance","getLastDistanceInWorld","getDownDistanceInWorld","getDistanceToPoint","point","getDistanceToPointInWorld","toolPositionInWorld","getDownCount","getDownTime","hitTest","nearest","getDownPath","getDownPathInWorld","Tool","input","initMouse","_downCount","mouse","x","y","_activateCallback","_deactivateCallback","_mouseDownCallback","_mouseDragCallback","_mouseMoveCallback","_mouseUpCallback","_keyDownCallbacks","_keyUpCallbacks","onActivate","callback","onDeactivate","onMouseDown","onMouseDrag","onMouseMove","onMouseUp","onKeyDown","key","onKeyUp","activate","call","deactivate","update","mouseButton","pressed","copy","event","state","released","downKeys","Object","keys","i","length","upKeys"],"mappings":"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","file":"tool.js","sourcesContent":["import Input from \"./input.js\";\nimport Vector2 from \"./../external/vector2.js\";\n\n\tvar ToolEvent = mini.Class.subclass({\n\t\tinitialize: function ToolEvent(tool) {\n\t\t\tthis.tool = tool;\n\t\t},\n\n\t\tsetScreenPosition: function(pos) { this._position = pos; },\n\t\tsetLastScreenPosition: function(pos) { this._lastPosition = pos; },\n\t\tsetDownScreenPosition: function(pos) { this._downPosition = pos; },\n\n\t\tgetScreenPosition: function() { return this._position; },\n\t\tgetLastScreenPosition: function() { return this._lastPosition; },\n\t\tgetDownScreenPosition: function() { return this._downPosition; },\n\n\t\tgetLastScreenMiddlePoint: function() {\n\t\t\tvar position = this.getScreenPosition();\n\t\t\tvar lastPosition = this.getLastScreenPosition();\n\t\t\treturn position.add(lastPosition).mulFloat(0.5);\n\t\t},\n\t\tgetDownScreenMiddlePoint: function() {\n\t\t\tvar position = this.getScreenPosition();\n\t\t\tvar downPosition = this.getDownScreenPosition();\n\t\t\treturn position.add(downPosition).mulFloat(0.5);\n\t\t},\n\n\t\t_transformToViewport: function(vector, viewport) {\n\t\t\tvar worldPos = viewport.screenToWorldCoordinates(vector);\n\t\t\treturn worldPos;\n\t\t},\n\t\t\n\t\tgetPositionInWorld: function(viewport) {\n\t\t\treturn this._transformToViewport(this._position, viewport);\n\t\t},\n\t\tgetLastPositionInWorld: function(viewport) {\n\t\t\treturn this._transformToViewport(this._lastPosition, viewport);\n\t\t},\n\t\tgetDownPositionInWorld: function(viewport) {\n\t\t\treturn this._transformToViewport(this._downPosition, viewport);\n\t\t},\n\t\t\n\t\tgetLastMiddlePointInWorld: function(viewport) {\n\t\t\tvar positionInWorld = this.getPositionInWorld(viewport);\n\t\t\tvar lastPositionInWorld = this.getLastPositionInWorld(viewport);\n\t\t\treturn positionInWorld.add(lastPositionInWorld).mulFloat(0.5);\n\t\t},\n\t\tgetDownMiddlePointInWorld: function(viewport) {\n\t\t\tvar positionInWorld = this.getPositionInWorld(viewport);\n\t\t\tvar downPositionInWorld = this.getDownPositionInWorld(viewport);\n\t\t\treturn positionInWorld.add(downPositionInWorld).mulFloat(0.5);\n\t\t},\n\t\t\n\t\tgetLastDelta: function() { return this._position.sub(this._lastPosition); },\n\t\tgetDownDelta: function() { return this._position.sub(this._downPosition); },\n\t\tgetLastDeltaInWorld: function(viewport) {\n\t\t\tvar positionInWorld = this.getPositionInWorld(viewport);\n\t\t\tvar lastPositionInWorld = this.getLastPositionInWorld(viewport);\n\t\t\treturn positionInWorld.sub(lastPositionInWorld);\n\t\t},\n\t\tgetDownDeltaInWorld: function(viewport) {\n\t\t\tvar positionInWorld = this.getPositionInWorld(viewport);\n\t\t\tvar downPositionInWorld = this.getDownPositionInWorld(viewport);\n\t\t\treturn positionInWorld.sub(downPositionInWorld);\n\t\t},\n\n\t\tgetLastDistance: function() { return this._position.distance(this._lastPosition); },\n\t\tgetDownDistance: function() { return this._position.distance(this._downPosition); },\n\t\tgetLastDistanceInWorld: function(viewport) {\n\t\t\tvar positionInWorld = this.getPositionInWorld(viewport);\n\t\t\tvar lastPositionInWorld = this.getLastPositionInWorld(viewport);\n\t\t\treturn positionInWorld.distance(lastPositionInWorld);\n\t\t},\n\t\tgetDownDistanceInWorld: function(viewport) {\n\t\t\tvar positionInWorld = this.getPositionInWorld(viewport);\n\t\t\tvar downPositionInWorld = this.getDownPositionInWorld(viewport);\n\t\t\treturn positionInWorld.distance(downPositionInWorld);\n\t\t},\n\n\t\tgetDistanceToPoint: function(point) { return this._position.distance(point); },\n\t\tgetDistanceToPointInWorld: function(point, viewport) {\n\t\t\tvar toolPositionInWorld = this.getPositionInWorld(viewport);\n\t\t\treturn toolPositionInWorld.distance(point);\n\t\t},\n\t\t// TODO: implement more convenient methods\n\t\tgetDownCount: function() {},\n\t\tgetDownTime: function() {},\n\t\thitTest: function(viewport) {},\n\t\tnearest: function(viewport) {},\n\t\tgetDownPath: function() {},\n\t\tgetDownPathInWorld: function(viewport) {}\n\t});\n\t\n\tvar Tool = mini.Class.subclass({\n\t\tinitialize: function Tool(input) {\n\t\t\tthis.input = input;\n\t\t\tthis.input.initMouse();\n\t\t\t\n\t\t\tthis._downCount = 0;\n\t\t\t\n\t\t\tthis._lastPosition = new Vector2(this.input.mouse.x, this.input.mouse.y);\n\t\t\t\n\t\t\tthis._activateCallback = function() {};\n\t\t\tthis._deactivateCallback = function() {};\n\t\t\tthis._mouseDownCallback = function() {};\n\t\t\tthis._mouseDragCallback = function() {};\n\t\t\tthis._mouseMoveCallback = function() {};\n\t\t\tthis._mouseUpCallback = function() {};\n\t\t\tthis._keyDownCallbacks = {};\n\t\t\tthis._keyUpCallbacks = {};\n\t\t},\n\t\t\n\t\tonActivate: function(callback) { this._activateCallback = callback; },\n\t\tonDeactivate: function(callback) { this._deactivateCallback = callback; },\n\t\tonMouseDown: function(callback) { this._mouseDownCallback = callback; },\n\t\tonMouseDrag: function(callback) { this._mouseDragCallback = callback; },\n\t\tonMouseMove: function(callback) { this._mouseMoveCallback = callback; },\n\t\tonMouseUp: function(callback) { this._mouseUpCallback = callback; },\n\t\tonKeyDown: function(key, callback) { this._keyDownCallbacks[key] = callback; },\n\t\tonKeyUp: function(key, callback) { this._keyUpCallbacks[key] = callback; },\n\t\t\n\t\tactivate: function() {\n\t\t\t//this.input.tool.deactivate();\n\t\t\tthis.input.tool = this;\n\t\t\tthis._activateCallback.call(this);\n\t\t},\n\n\t\tdeactivate: function() {\n\t\t\tthis._deactivateCallback.call(this);\n\t\t},\n\n\t\tupdate: function() {\n\t\t\tvar mouseButton = \"leftclick\";\n\t\t\tvar position = new Vector2(this.input.mouse.x, this.input.mouse.y);\n\t\t\tif(this.input.pressed(mouseButton))\n\t\t\t\tthis._downPosition = position.copy();\n\n\t\t\tvar event = new ToolEvent(this);\n\t\t\tevent.setScreenPosition(position);\n\t\t\tevent.setLastScreenPosition(this._lastPosition || position);\n\t\t\tevent.setDownScreenPosition(this._downPosition);\n\t\t\t\n\t\t\t// down\n\t\t\tif(this.input.pressed(mouseButton))\n\t\t\t\tthis._mouseDownCallback.call(this, event);\n\n\t\t\t// drag\n\t\t\tif(this.input.state(mouseButton))\n\t\t\t\tthis._mouseDragCallback.call(this, event);\n\n\t\t\t// move\n\t\t\tif(!this.input.state(mouseButton))\n\t\t\t\tthis._mouseMoveCallback.call(this, event);\n\t\t\t\n\t\t\t// up\n\t\t\tif(this.input.released(mouseButton))\n\t\t\t\tthis._mouseUpCallback.call(this, event);\n\t\t\t\n\t\t\t// key down\n\t\t\tvar downKeys = Object.keys(this._keyDownCallbacks);\n\t\t\tfor(var i = 0; i < downKeys.length; i++) {\n\t\t\t\tvar key = downKeys[i];\n\t\t\t\tif(this.input.pressed(key))\n\t\t\t\t\tthis._keyDownCallbacks[key].call(this, event);\n\t\t\t}\n\t\t\t\n\t\t\t// key up\n\t\t\tvar upKeys = Object.keys(this._keyUpCallbacks);\n\t\t\tfor(var i = 0; i < upKeys.length; i++) {\n\t\t\t\tvar key = upKeys[i];\n\t\t\t\tif(this.input.released(key))\n\t\t\t\t\tthis._keyUpCallbacks[key].call(this, event);\n\t\t\t}\n\t\t\t\n\t\t\tthis._lastPosition = position.copy();\n\t\t}\n\t});\n\t\n\texport default Tool;\n"]}