/// <summary>
        /// Saves a scriptable object behavior tree and sets the active asset back to the behavior manager
        /// </summary>
        /// <param name="behaviorManager"></param>
        /// <param name="filePath"></param>
        /// <param name="asset"></param>
        public static void SaveBehaviorAsset(this BehaviorManager behaviorManager, string filePath,
                                             BehaviorTreeManagerAsset asset, Merge root = null)
        {
            if (asset == null)
            {
                asset = ScriptableObject.CreateInstance <BehaviorTreeManagerAsset>();
            }

            var runnerElementList = new List <BehaviorTreeElement>();

            Debug.Log("Attempting save at path: " + filePath);

            int indexS = filePath.LastIndexOf("/") + 1;
            int indexD = filePath.LastIndexOf(".") - indexS;

            asset.name = filePath.Substring(indexS, indexD);

            var json = asset.RunnerElementsJSON;

            if (behaviorManager != null)
            {
                behaviorManager.Reinitialize();
                asset.MilliSecondsBetweenTicks = behaviorManager.MilliSecondsBetweenTicks;
                asset.TimesToTick = behaviorManager.TimesToTick;

                TreeElementUtility.TreeToList(behaviorManager.Runner, runnerElementList);
            }

            if (root != null)
            {
                TreeElementUtility.TreeToList(root, runnerElementList);
            }

            if (json == "" || runnerElementList.Count == 0)
            {
                var runner = new Merge("Extension Root", -1, -1);
                runnerElementList.Add(runner);

                json = JsonConvert.SerializeObject(runnerElementList, Formatting.Indented);
            }
            json = JsonConvert.SerializeObject(runnerElementList, Formatting.Indented);
            asset.RunnerElementsJSON = json;

            Debug.Log("JSON Saved: " + asset.RunnerElementsJSON);

            var curPath = AssetDatabase.GetAssetPath(asset);

            if (curPath == null || curPath == "")
            {
                Debug.Log("Creating asset: " + filePath);
                AssetDatabase.CreateAsset(asset, filePath);
            }

            //AssetDatabase.Refresh();
            EditorUtility.SetDirty(asset);
            AssetDatabase.SaveAssets();
        }
예제 #2
0
 public void SetTreeAsset(BehaviorTreeManagerAsset BehaviorTreeAsset)
 {
     if (BehaviorTreeAsset == null || BehaviorTreeAsset.RunnerElementsJSON == "")
     {
         CreateNewTree();
     }
     _BehaviorTreeManagerAsset = BehaviorTreeAsset;
     _Initialized = false;
 }
예제 #3
0
        void CreateNewTree()
        {
            CustomAssetUtility.CreateAsset <BehaviorTreeManagerAsset>();
            _BehaviorTreeManagerAsset = (BehaviorTreeManagerAsset)Selection.activeObject;
            var root = new Merge("root", -1, -1);

            BehaviorExtensions.SaveBehaviorAsset(null, AssetDatabase.GetAssetPath(_BehaviorTreeManagerAsset),
                                                 _BehaviorTreeManagerAsset, (Merge)root);
        }
예제 #4
0
        void OnSelectionChange()
        {
            if (!_Initialized)
            {
                return;
            }

            var BehaviorTreeAsset = Selection.activeObject as BehaviorTreeManagerAsset;

            if (BehaviorTreeAsset != null && BehaviorTreeAsset != _BehaviorTreeManagerAsset)
            {
                _BehaviorTreeManagerAsset = BehaviorTreeAsset;
                _TreeView.treeModel.SetData(GetData());
                _TreeView.Reload();
            }
        }