1 line
18 KiB
JavaScript
1 line
18 KiB
JavaScript
"use strict";function e(e,t){var a=[t,0];return I.apply(a,x.call(arguments,2)),O.apply(e,a),e}var t=function(e){return e&&e.__esModule?e["default"]:e},a=function(){function e(e,t){for(var a in t){var i=t[a];i.configurable=!0,i.value&&(i.writable=!0)}Object.defineProperties(e,t)}return function(t,a,i){return a&&e(t.prototype,a),i&&e(t,i),t}}(),i=function E(e,t,a){var i=Object.getOwnPropertyDescriptor(e,t);if(void 0===i){var r=Object.getPrototypeOf(e);return null===r?void 0:E(r,t,a)}if("value"in i&&i.writable)return i.value;var s=i.get;if(void 0!==s)return s.call(a)},r=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},s=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=require("events").EventEmitter,o=require("jibo-keyframes"),y=t(o),u=t(o),l=t(require("jibo-keyframes/lib/jibo-keyframe-info")),h=t(require("lodash")),f=t(require("../../common/undo-redo")),c=t(require("../../common/clipboard")),m=require("animation-utilities"),d=m.RobotInfo,v=m.JiboConfig,p=t(require("./keyframe-selection")),g=t(require("fs")),k=t(require("path")),L=require("crypto"),S="win32"===process.platform?process.env.HOMEPATH:process.env.HOME,K=k.resolve(S,".jibo");g.existsSync(K)||g.mkdirSync(K);var T=k.resolve(K,"temp");g.existsSync(T)||g.mkdirSync(T);var b=function(t){function n(e,t){s(this,n),i(Object.getPrototypeOf(n.prototype),"constructor",this).call(this),this.setMaxListeners(100),this.limits={},this.editor=e,this.projectRoot=t,this.state={selection:{layers:[null]}},this.keyframeSelection=new p(this),this.uiState={currentTime:0,currentKeyframe:0,isPlaying:!1},this.getDofLimits(),this._reloadFile(e.uri);var a=L.createHash("md5");a.update(e.uri);var r=a.digest("hex"),o=k.basename(r),y=T+"/"+o+".backup";g.existsSync(y)||this.backup(),this.undoRedo=new f(this)}return r(n,t),a(n,{dispose:{value:function(){delete this.state,delete this.uiState,this.requestAnimationID&&window.cancelAnimationFrame(this.requestAnimationID)}},getDofLimits:{value:function(){var e=this,t=new v;d.createInfo(t,function(t){t.getBodyDOFNames().forEach(function(a){var i=u.channels.dofNameToDisplayName(a);e.limits[i]={};var r=t.getDOFInfo(a),s=r.getLimit("velocity"),n=r.getLimit("acceleration");e.limits[i].velocityLimit=s,e.limits[i].accelerationLimit=n}),e.robotInfo=t,e.emit("onpropertieschanged")})}},setLimit:{value:function(e,t){this.limits.exceedsVelLimit=e,this.limits.exceedsAccelLimit=t}},getKeyframeInfo:{value:function(){return l}},getLayer:{value:function(e){for(var t=0;t<this.state.keyframes.layers.length;t++)if(this.state.keyframes.layers[t].id===e)return this.state.keyframes.layers[t];return null}},getLayersOfType:{value:function(e){e=Array.isArray(e)?e:[e];var t=h.filter(this.state.keyframes.layers,function(t){return h.includes(e,t.type)});return t}},isLayerOfTypeSelected:{value:function(e){return e=Array.isArray(e)?e:[e],h.includes(e,this.keyframeSelection.getSelectionLayerType())}},deleteLayerById:{value:function(e){for(var t=this.getSelectedLayer().id,a=0;a<this.state.keyframes.layers.length;a++)if(this.state.keyframes.layers[a].id===e)return this.state.keyframes.layers.splice(a,1),0===this.state.keyframes.layers.length?this.state.selection.layers[0]=null:t===e&&this.setSelection(this.state.keyframes.layers[0].id),this.syncOverrides(),this.emit("ondatachanged"),void this.emit("onpropertieschanged")}},setLayerName:{value:function(e,t){var a=this.getLayer(e);a.name=t,this.emit("ondatachanged"),this.emit("onpropertieschanged")}},generateID:{value:function(){return Math.floor(0x12ab3babf5f80c00*Math.random()).toString(16)}},_findNameForLayer:{value:function(e){if(null===this.getLayerByName(e))return e;for(var t=1;1e5>t;t++){var a=""+e+" #"+t;if(null===this.getLayerByName(a))return a}}},addLayer:{value:function(e){this.state.keyframes.layers.push({id:y.generateId(),name:this._findNameForLayer(e),type:e,visible:!0,locked:!1,keyframes:[]}),1===this.state.keyframes.layers.length&&this.setSelection(this.state.keyframes.layers[0].id),this.syncOverrides(),this.emit("ondatachanged"),this.emit("onpropertieschanged")}},_addLayerFromData:{value:function(e){var t={id:y.generateId(),name:e.name,type:e.type,visible:e.visible,locked:e.locked,keyframes:h.cloneDeep(e.keyframes)};return this.state.keyframes.layers.push(t),t.id}},undo:{value:function(){this.undoRedo.undo(),this.emit("onpropertieschanged")}},redo:{value:function(){this.undoRedo.redo(),this.emit("onpropertieschanged")}},cut:{value:function(){this.copy(),this.keyframeSelection.deleteKeyframes()}},cutKeyByTime:{value:function(e,t){this.copyKeyByTime(e,t),this.deleteKeyByTime(e,t)}},cutLayer:{value:function(e){this.copyLayer(e),this.deleteLayerById(e),this.emit("onpropertieschanged"),this.emit("ondatachanged")}},copy:{value:function(){var e=this,t=this.getSelectedLayer();if(null!==t){var a=h.findIndex(t.keyframes,function(t){return t.time===e.uiState.currentKeyframe});this._copyKey(t,a)}}},copyKeyByTime:{value:function(e,t){var a=this.getLayer(e),i=h.findIndex(a.keyframes,function(e){return e.time===t});this._copyKey(a,i)}},_copyKey:{value:function(e,t){if(null!==e&&-1!==t){var a={type:"keyframe",layerType:e.type,value:h.cloneDeep(e.keyframes[t].value)};c.animationData=JSON.stringify(a)}}},copyLayer:{value:function(e){var t=this.getLayer(e),a={type:"layer",object:h.cloneDeep(t)};c.animationData=JSON.stringify(a)}},canPasteLayer:{value:function(){if(void 0!==c.animationData){var e=JSON.parse(c.animationData),t="layer"===e.type,a="Video";if(t&&e.object.type==a){var i=this.getLayersOfType(a);t=0===i.length}return t}return!1}},paste:{value:function(){this._pasteKey(this.getSelectedLayer(),this.uiState.currentKeyframe)}},_pasteKey:{value:function(e,t){if(this.canPasteKeyframe(e.id)){var a=JSON.parse(c.animationData);this.upsertKeyframe(e,t,a.value),this.syncOverrides(),this.emit("ondatachanged"),this.emit("onpropertieschanged"),this.addRedoUndoEntry()}}},pasteKeyByTime:{value:function(e,t){var a=this.getLayer(e);this._pasteKey(a,t)}},pasteLayer:{value:function(e){if(this.canPasteLayer()){var t=JSON.parse(c.animationData),a=this._addLayerFromData(t.object);this.reorderToAfterLayer(a,e),this.syncOverrides(),this.emit("ondatachanged"),this.emit("onpropertieschanged"),this.addRedoUndoEntry()}}},getData:{value:function(){return this.state}},getMutationFunctionNames:{value:function(){return["reloadFile","addRedoUndoEntry","upsertKeyframes","resetKeyframes","setLayerName","addLayer","deleteLayerById","deleteKeysByLayerId","deleteKeyByTime","addKeyByTime"]}},reload:{value:function(e){var t=this.state.selection.layers[0];this.state=e;var a=this.getSelectedLayer();a||(0!==this.state.keyframes.layers.length?this.state.selection.layers[0]=this.state.keyframes.layers[0].id:this.state.selection.layers[0]=null),this.uiState.currentKeyframe>=this.state.keyframes.duration&&this.setKeyframe(this.state.keyframes.duration-1),this.isPlaying()&&this.togglePlay(),t!==this.state.selection.layers[0]&&this.emit("layerselected")}},reloadFile:{value:function(){this._reloadFile(this.editor.uri)}},_reloadFile:{value:function(e){var t=this;return this.state?(this.state.keyframes=y.runtime.load(e,l),this.state.overrides={},this.state.keyframes.layers.forEach(function(e){t.state.overrides[e.id]={}}),this.syncOverrides(),this.reload(this.state),this.emit("ondatachanged"),void this.emit("onpropertieschanged")):(console.warn("attempting to reload destroyed AM for ",this),"")}},getDuration:{value:function(){return this.state.keyframes.duration}},setDuration:{value:function(e,t,a){return this.state.keyframes.duration=this.multiplier&&!t?Math.ceil(e*this.multiplier):e,a&&(this.state.keyframes.layers.forEach(function(t){var a=h.findIndex(t.keyframes,function(t){return t.time>=e});-1!==a&&(t.keyframes=t.keyframes.slice(0,a))}),this.uiState.currentKeyframe>=this.state.keyframes.duration&&this.setKeyframe(this.state.keyframes.duration-1),this.keyframeSelection.validateSelection()),this.emit("ondatachanged"),this.emit("onpropertieschanged"),this.state.keyframes.duration}},setKeyframes:{value:function(){var e=this;this.multiplier&&(this.state.keyframes.layers.forEach(function(t){t.keyframes.forEach(function(t){t.time=Math.floor(t.time*e.multiplier)})}),this.syncOverrides(),this.emit("ondatachanged"),this.emit("onpropertieschanged"))}},setScale:{value:function(e){e!==this.state.keyframes.scale&&(this.state.keyframes.scale&&(this.multiplier=e/this.state.keyframes.scale),this.state.keyframes.scale=e)}},setSelection:{value:function(e){this.state.selection.layers[0]=e,this.keyframeSelection.validateSelection(),this.emit("ondatachanged"),this.emit("layerselected")}},getSelectedLayer:{value:function(){for(var e=this.state.selection.layers[0],t=0;t<this.state.keyframes.layers.length;t++)if(this.state.keyframes.layers[t].id===e)return this.state.keyframes.layers[t];return null}},getSelectedLayerProperties:{value:function(){var e=this.getSelectedLayer();return this.state.overrides[e.id]}},reorderToBeforeLayer:{value:function(e,t){var a=this.getLayer(e),i=h.indexOf(this.state.keyframes.layers,a);this.state.keyframes.layers.splice(i,1);var r=this.getLayer(t),s=h.indexOf(this.state.keyframes.layers,r);this.state.keyframes.layers.splice(s,0,a),this.emit("ondatachanged")}},reorderToAfterLayer:{value:function(e,t){var a=this.getLayer(e),i=h.indexOf(this.state.keyframes.layers,a);this.state.keyframes.layers.splice(i,1);var r=this.getLayer(t),s=h.indexOf(this.state.keyframes.layers,r);this.state.keyframes.layers.splice(s+1,0,a),this.emit("ondatachanged")}},getLayerIndex:{value:function(e){return h.indexOf(this.state.keyframes.layers,this.getLayer(e))}},getLayerCount:{value:function(){return this.state.keyframes.layers.length}},getLayerByIndex:{value:function(e){return this.state.keyframes.layers[e]}},getLayerByName:{value:function(e){var t=h.findIndex(this.state.keyframes.layers,function(t){return t.name===e});return-1!==t?this.state.keyframes.layers[t]:null}},isPreviousLayer:{value:function(e,t){var a=this.getLayerIndex(e),i=this.getLayerIndex(t);return a===i-1}},isNextLayer:{value:function(e,t){var a=this.getLayerIndex(e),i=this.getLayerIndex(t);return a===i+1}},updateSelectedLayerProperties:{value:function(e){var t=this.getSelectedLayer().id;this.state.overrides[t]=h.merge({},h.cloneDeep(this.state.overrides[t]),h.cloneDeep(e)),this.emit("ondatachanged")}},updateSelectedLayerPropertiesRelative:{value:function(e){e=y.runtime.computeRelativePropValues(this.getSelectedLayer(),this.state.keyframes,l,this.uiState.currentTime,e,this.state.overrides),this.updateSelectedLayerProperties(e)}},addRedoUndoEntry:{value:function(){}},backup:{value:function(){var e=L.createHash("md5");e.update(this.editor.uri);var t=e.digest("hex"),a=k.basename(t),i=T+"/"+a+".backup";this.saveFile(i)}},toggleLayerVisibility:{value:function(e){var t=this.getLayer(e);t.visible=!t.visible,this.emit("ondatachanged"),this.emit("onpropertieschanged"),this.addRedoUndoEntry()}},toggleLayerLocked:{value:function(e){var t=this.getLayer(e);t.locked=!t.locked,this.emit("ondatachanged"),this.emit("onpropertieschanged"),this.addRedoUndoEntry()}},deleteKeyByTime:{value:function(e,t){var a=this.getLayer(e),i=h.find(a.keyframes,function(e){return e.time===t});this._deleteKeyframe(a,i)&&(this.syncOverrides(),this.emit("ondatachanged"),this.emit("onpropertieschanged"))}},_deleteKeyByTime:{value:function(e,t){var a=this,i=this.getLayer(e);h.remove(i.keyframes,function(e){return a.syncOverrides(),a.emit("ondatachanged"),a.emit("onpropertieschanged"),e.time===t})}},_deleteKeyframe:{value:function(e,t){return t?(h.remove(e.keyframes,function(e){return e===t}),!0):!1}},deleteKeysByLayerId:{value:function(e){var t=this.getLayer(e),a=0!==t.keyframes.length;t.keyframes=[],a&&(this.syncOverrides(),this.emit("ondatachanged"),this.emit("onpropertieschanged"))}},upsertKeyframes:{value:function(e){var t=this,a=e?this.state.keyframes.layers:[this.getLayer(this.state.selection.layers[0])],i=[];a.forEach(function(e){var a=e.id,r=t,s=h.find(e.keyframes,function(e){return e.time===r.uiState.currentKeyframe});s?(s.value=h.cloneDeep(t.state.overrides[a]),i.push(e)):t._addKeyframe(e,r.uiState.currentKeyframe)}),0!==i.length&&this.emit("onkeyframeupsert",{keyframeTime:this.uiState.currentKeyframe,layers:i}),this.emit("ondatachanged"),this.emit("onpropertieschanged")}},addKeyByTime:{value:function(e,t){var a=this.getLayer(e);this._addKeyframe(a,t),this.emit("ondatachanged"),this.emit("onpropertieschanged")}},_addKeyframe:{value:function(t,a){for(var i=t.id,r=!1,s=0;s<t.keyframes.length;s++)if(t.keyframes[s].time>a){t.keyframes=e(t.keyframes,s,{value:h.cloneDeep(this.state.overrides[i]),time:a}),r=!0;break}r||t.keyframes.push({value:h.cloneDeep(this.state.overrides[i]),time:a}),this.addRedoUndoEntry()}},keyframeExists:{value:function(e,t){var a=this.getLayer(e);return a?-1!==h.findIndex(a.keyframes,function(e){return t===e.time}):!1}},getKeyframe:{value:function(e,t){var a=this.getLayer(e);if(a){var i=h.findIndex(a.keyframes,function(e){return t===e.time});if(-1!==t)return a.keyframes[i]}return null}},moveKeyframe:{value:function(e,t,a,i,r,s){var n=this.getLayer(e),o=this.getLayer(a),y=h.findIndex(n.keyframes,function(e){return e.time===t}),u=n.keyframes[y];s||n.keyframes.splice(y,1),this.upsertKeyframe(o,i,u.value),this.syncOverrides(),r!==!1&&(this.emit("ondatachanged"),this.emit("onpropertieschanged"))}},upsertKeyframe:{value:function(t,a,i){var r=h.findIndex(t.keyframes,function(e){return e.time===a}),s={value:h.cloneDeep(i),time:a};if(-1!==r)t.keyframes[r]=s;else if(0===t.keyframes.length||t.keyframes[t.keyframes.length-1].time<a)t.keyframes.push(s);else{var n=h.findIndex(t.keyframes,function(e){return e.time>a});t.keyframes=e(t.keyframes,n,s)}}},resetKeyframes:{value:function(){for(var e in this.state.overrides)this.state.overrides[e]=this.getDefaultPropsForLayerType(this.getLayer(e).type)}},syncOverrides:{value:function(){var e=this;this.state.overrides={},this.state.keyframes.layers.forEach(function(t){var a=y.runtime.evaluateLayer(t,e.state.keyframes,l,e.uiState.currentTime);e.state.overrides[t.id]=a})}},evaluateAllDOFLayers:{value:function(){var e=y.runtime.evaluateAllDOFLayers(this.state.keyframes,l,this.uiState.currentTime,this.state.overrides);return e}},evaluateAllLayersFiltered:{value:function(e){var t=y.runtime.evaluateAllLayersFiltered(this.state.keyframes,l,this.uiState.currentTime,e,!0,this.state.overrides);return t}},getDefaultPropsForLayerType:{value:function(e){var t=l.layerTypes[e].getInfo(),a={};for(var i in t.properties)a[i]=h.cloneDeep(t.properties[i].defaultValue);return a}},saveFile:{value:function(e){this.state?(y.runtime.save(e,this.state.keyframes),this.emit("save")):console.error("Attempting to save destroyed AM for uri ",this.editor.uri)}},isLayerSelected:{value:function(e){for(var t=0;t<this.state.selection.layers.length;t++)if(this.state.selection.layers[t]===e)return!0;return!1}},isPlaying:{value:function(){return this.uiState.isPlaying}},playLoop:{value:function(){var e=(new Date).getTime(),t=(e-this.lastLoopTime)/1e3;for(this.lastLoopTime=e,this.uiState.currentTime+=t;this.uiState.currentTime>this.state.keyframes.duration/this.state.keyframes.framerate;)this.uiState.currentTime-=this.state.keyframes.duration/this.state.keyframes.framerate;var a=Math.floor(this.uiState.currentTime*this.state.keyframes.framerate);this.uiState.currentKeyframe!==a&&this.setKeyframe(a,!0),this.requestAnimationID=window.requestAnimationFrame(this.playLoop.bind(this))}},togglePlay:{value:function(){this.isPlaying()?(window.cancelAnimationFrame(this.requestAnimationID),this.requestAnimationID=void 0):(this.lastLoopTime=(new Date).getTime(),this.requestAnimationID=window.requestAnimationFrame(this.playLoop.bind(this))),this.uiState.isPlaying=!this.uiState.isPlaying,this.emit("ondatachanged"),this.emit("toggle-play",this.uiState.isPlaying)}},getCurrentTime:{value:function(){return this.uiState.currentTime}},stepTimeForward:{value:function(){this.isPlaying()&&this.togglePlay(),this.setKeyframe((this.uiState.currentKeyframe+1)%this.state.keyframes.duration)}},stepTimeBackward:{value:function(){this.isPlaying()&&this.togglePlay(),0===this.uiState.currentKeyframe?this.setKeyframe(this.state.keyframes.duration-1):this.setKeyframe(this.uiState.currentKeyframe-1)}},nextLayer:{value:function(){if(!(this.state.keyframes.layers.length<2))for(var e=0;e<this.state.keyframes.layers.length;e++)if(this.state.keyframes.layers[e]===this.getSelectedLayer())return this.keyframeSelection._clearSelection(),this.setSelection(this.state.keyframes.layers[(e+1)%this.state.keyframes.layers.length].id),void this.addRedoUndoEntry()}},previousLayer:{value:function(){if(!(this.state.keyframes.layers.length<2))for(var e=0;e<this.state.keyframes.layers.length;e++)if(this.state.keyframes.layers[e]===this.getSelectedLayer()){this.keyframeSelection._clearSelection();var t=e>0?e-1:this.state.keyframes.layers.length-1;return this.setSelection(this.state.keyframes.layers[t].id),void this.addRedoUndoEntry()}}},canMoveUp:{value:function(e){if(this.state.keyframes.layers.length<2)return!1;var t=this.getLayerIndex(e),a=t>0?t-1:t;return t!==a}},canMoveDown:{value:function(e){if(this.state.keyframes.layers.length<2)return!1;var t=this.getLayerIndex(e),a=t<this.state.keyframes.layers.length-1?t+1:t;return t!==a}},moveUp:{value:function(e){if(this.canMoveUp(e)){var t=this.getLayerIndex(e)-1;this.reorderToBeforeLayer(e,this.getLayerByIndex(t).id),this.addRedoUndoEntry()}}},moveDown:{value:function(e){if(this.canMoveDown(e)){var t=this.getLayerIndex(e)+1;this.reorderToAfterLayer(e,this.getLayerByIndex(t).id),this.addRedoUndoEntry()}}},goToNextKeyframe:{value:function(){var e=Number.MAX_SAFE_INTEGER,t=this,a=this.state.selection.layers[0],i=this.getLayer(a);0!==i.keyframes.length&&(i.keyframes.forEach(function(a){a.time<=t.uiState.currentKeyframe||a.time>e||(e=a.time)}),e===Number.MAX_SAFE_INTEGER?this.setKeyframe(0):this.setKeyframe(e))}},goToPrevKeyframe:{value:function(){var e=-1,t=this,a=this.state.selection.layers[0],i=this.getLayer(a);0!==i.keyframes.length&&(i.keyframes.forEach(function(a){a.time>=t.uiState.currentKeyframe||a.time<e||(e=a.time)}),-1===e?(this.uiState.currentKeyframe=this.state.keyframes.duration,this.goToPrevKeyframe()):this.setKeyframe(e))}},setKeyframe:{value:function(e,t){e!==this.uiState.currentKeyframe&&(this.uiState.currentKeyframe=e,t||(this.uiState.currentTime=e/this.state.keyframes.framerate),this.syncOverrides(),this.emit("ondatachanged"))}}},{createNewFile:{value:function(e){var t=y.runtime.create(l);y.runtime.save(e,t)}}}),n}(n),D=Array.prototype,I=D.push,x=D.slice,O=D.splice;module.exports=b; |