Files
JiboSDK/lib/behavior-editor/behavior-editor.js
2026-03-22 03:21:45 +02:00

1 line
6.1 KiB
JavaScript

"use strict";var e=function(e){return e&&e.__esModule?e["default"]:e},t=function(){function e(e,t){for(var r in t){var a=t[r];a.configurable=!0,a.value&&(a.writable=!0)}Object.defineProperties(e,t)}return function(t,r,a){return r&&e(t.prototype,r),a&&e(t,a),t}}(),r=function m(e,t,r){var a=Object.getOwnPropertyDescriptor(e,t);if(void 0===a){var o=Object.getPrototypeOf(e);return null===o?void 0:m(o,t,r)}if("value"in a&&a.writable)return a.value;var i=a.get;if(void 0!==i)return i.call(r)},a=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)},o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},i=e(require("fs")),n=e(require("path")),s=e(require("../atom-react/core/react-editor")),c=e(require("./behavior-editor-view")),l=e(require("./tree-model")),u=e(require("../common/tree-view-helper")),d=e(require("lodash")),h=require("crypto"),v="win32"===process.platform?process.env.HOMEPATH:process.env.HOME,f=n.resolve(v,".jibo");i.existsSync(f)||i.mkdirSync(f);var g=n.resolve(f,"temp");i.existsSync(g)||i.mkdirSync(g);var BehaviorEditor=function(e){function BehaviorEditor(e){o(this,BehaviorEditor),r(Object.getPrototypeOf(BehaviorEditor.prototype),"constructor",this).call(this,e,!1),this.projectRoot=s.getProjectRoot(e),this.ignoreNextSave=!1,this.data=this.readJson(e),this.schema=BehaviorEditor.getNewSchema(e);var t=this.getUiState();this.layout=t?t:[],this.model=new l(this.data,this.schema,e),this.lastSaved=JSON.stringify(this.model.data)}return a(BehaviorEditor,e),t(BehaviorEditor,{readJson:{value:function(e){var t=void 0;try{t=JSON.parse(i.readFileSync(e,"utf8"))}catch(r){return void console.error(r)}for(var a=Object.keys(t),o=0;o<a.length;o++)for(var n=t[a[o]],s=0;s<n.args.length;s++)Array.isArray(n.args[s])&&(n.args[s]=n.args[s].join("\n"));return t}},backup:{value:function(e){var t=d.cloneDeep(this.model.data),r=h.createHash("md5");r.update(e);for(var a=r.digest("hex"),o=n.basename(a),s=g+"/"+o+".backup",c=Object.keys(t),l=0;l<c.length;l++)for(var u=t[c[l]],v=0;v<u.args.length;v++)"string"==typeof u.args[v]&&(0===u.args[v].indexOf("function")||u.args[v].indexOf("=>")>=0)&&(u.args[v]=u.args[v].split("\n"));i.writeFileSync(s,JSON.stringify(t,null," "),"utf8")}},saveFile:{value:function(e){if(!BehaviorEditor.isValidDirectory(e))return alert('You must save behavior trees under the "behaviors" folder.'),!1;this.ignoreNextSave=!0,this.lastSaved=JSON.stringify(this.model.data);for(var t=d.cloneDeep(this.model.data),r=Object.keys(t),a=0;a<r.length;a++)for(var o=t[r[a]],n=0;n<o.args.length;n++)"string"==typeof o.args[n]&&(0===o.args[n].indexOf("function")||o.args[n].indexOf("=>")>=0)&&(o.args[n]=o.args[n].split("\n"));return i.writeFileSync(e,JSON.stringify(t,null," "),"utf8"),!0}},checkModified:{value:function(){var e=JSON.stringify(this.model.data);return e!==this.lastSaved?(this.setModifiedStatus(!0),!0):(this.setModifiedStatus(!1),!1)}},serialize:{value:function(){return this.saveUiState(this.layout),r(Object.getPrototypeOf(BehaviorEditor.prototype),"serialize",this).call(this)}},dispose:{value:function(){this.saveUiState(this.layout),r(Object.getPrototypeOf(BehaviorEditor.prototype),"dispose",this).call(this)}},getReactClass:{value:function(){return c}},getNewSchema:{value:function(e){return BehaviorEditor.getNewSchema(e)}},reload:{value:function(){var e=void 0===arguments[0]?this.uri:arguments[0];return this.ignoreNextSave?void(this.ignoreNextSave=!1):(this.data=this.readJson(e),this.model.reload(this.data,this.schema),void this.model.emit("ondatachanged"))}},getSaveDialogOptions:{value:function(){return{title:"Behavior Save As",filters:BehaviorEditor.getDialogFilter()}}}},{createNewFile:{value:function(e){var t=u.getFolderPathWithDirectory(u.getFolderPathOfSelection(),"behaviors");if(!t)return void alert("You must have a valid project loaded in order to create a new behavior tree file.");var r=atom.getCurrentWindow(),a=require("remote"),o=a.require("dialog");o.showSaveDialog(r,{title:"New Behavior Tree",defaultPath:t,filters:BehaviorEditor.getDialogFilter()},function(t){if(t){if(BehaviorEditor.isValidDirectory(t)){var r=BehaviorEditor.getNewSchema(t);l.createNewFile(t,r.core.schema.Sequence),atom.workspace.open(t)}else alert('You must save behavior trees under the "behaviors" folder.');if(e){var a=s.getProjectRoot(t),o=n.join(a,"behaviors");e(n.relative(o,t.toLowerCase()))}}})}},isValidDirectory:{value:function(e){var t=n.normalize("/behaviors/");return e.includes(t)?!0:!1}},getDialogFilter:{value:function(){return[{name:"Behavior Tree",extensions:["bt"]}]}},getNewSchema:{value:function(e){var t=function(e){var t=void 0;try{t=require(e),d.forEach(t,function(r,a){if(t[a].description&&t[a].description.url){var o=n.resolve(n.dirname(e),t[a].description.url);try{t[a].description=i.readFileSync(o,"utf8")}catch(s){t[a].description=""}}})}catch(r){}return t},r=function(e){var t={};return e.forEach(function(e){t=Object.assign(t,e)}),Object.keys(t).forEach(function(e){t[e]["class"]=e}),t},a=function(e,a,o){var s=n.resolve(o,"schemas"),c=[];try{i.lstatSync(s);for(var l=i.readdirSync(s),d=0;d<l.length;d++)if(".json"===n.extname(l[d])){var h=n.resolve(s,l[d]);c.push(t(h))}}catch(v){console.warn("no schema folder detected "+v.message)}u[a]={displayName:e,schema:r(c)}},o=s.getProjectRoot(e);o||(o=s.getProjectRoot(""));var c=[],l=["/node_modules/jibo/schema/schema","/node_modules/jibo/schema/schema-base","/node_modules/jibo/node_modules/jibo-bt/schema/schema"];l.forEach(function(e){var r=t(n.join(o,e));r&&c.push(r)});var u={core:{displayName:"Core",schema:r(c)}};a("Project Behaviors","project",o);var h=n.resolve(o,"node_modules"),v=[];try{v=i.readdirSync(h)}catch(f){console.warn("no node_modules folder detected "+f.message)}for(var g=0;g<v.length;g++)try{var m=require(n.resolve(h,v[g],"package.json"));if(m.jibo&&"asset-pack"===m.jibo.type){var p=n.resolve(h,v[g]);a(m.jibo["display-name"],m.name,p)}}catch(f){}return u}}}),BehaviorEditor}(s);module.exports=BehaviorEditor,atom.deserializers.add(BehaviorEditor);