public void SetBehaviourTreeAsset(BehaviourTreeAsset asset) { if (asset == tree) { return; } if (tmpAsset != null) { BehaviourTreeAsset.DestroyAsset(tmpAsset, true); tmpAsset = null; } tree = asset; var bind = runner == null || asset == null ? null : runner.GetBinder(asset); if (bind != null) { runner = bind.Runner; } runtimeBinder = bind; if (tree != null) { tmpAsset = tree.Clone(); } if (updateTreeAsset != null) { updateTreeAsset(); } }
public void SaveAsset() { if (tmpAsset == null) { return; } List <BTNode> children = new List <BTNode>(); var path = tree == null ? null : AssetDatabase.GetAssetPath(tree); tmpAsset.EditorResort(); if (string.IsNullOrEmpty(path)) { path = EditorUtility.SaveFilePanelInProject("Save Behaviour Tree", AssetName, "asset", "Save behaviour asset."); if (string.IsNullOrEmpty(path)) { return; } if (File.Exists(path)) { AssetDatabase.DeleteAsset(path); } tree = tmpAsset.Clone(); var name = Path.GetFileName(path); if (name.EndsWith(".asset")) { name = name.Substring(0, name.Length - 6); } tree.name = name; AssetDatabase.CreateAsset(tree, path); tree.GetAllNodes(children); foreach (var t in children) { AssetDatabase.AddObjectToAsset(t.Asset, path); } AssetDatabase.ImportAsset(path); } else { tmpAsset.EditorMergeTo(path, tree); tree.GetAllNodes(children); foreach (var t in children) { AssetDatabase.AddObjectToAsset(t.Asset, path); } AssetDatabase.ImportAsset(path); } //AssetDatabase.SaveAssets(); }
public void SetBehaviourTreeRunner(BehaviourTreeRunner runner) { if (runner == null) { this.runner = null; this.runtimeBinder = null; return; } if (this.runner == null) { this.runner = null; } var asset = runner == null ? tree : runner.SourceAsset; if (asset == null) { asset = tree; } var bind = runner == null ? null : runner.GetBinder(asset); if (asset == tree && this.runner == runner && runtimeBinder == bind) { return; } this.runner = runner; this.tree = asset; runtimeBinder = bind; if (tmpAsset != null) { BehaviourTreeAsset.DestroyAsset(tmpAsset, true); tmpAsset = null; } if (tree != null) { if (tree != null) { tmpAsset = tree.Clone(); } if (updateTreeAsset != null) { updateTreeAsset(); } } }
public void Reset() { if (runner != null && tree == null) { tree = runner.SourceAsset; } if (tree != null) { runtimeBinder = runner == null ? null : runner.GetBinder(tree); if (tmpAsset == null) { tmpAsset = tree.Clone(); } else { tree.EditorMergeTo(null, tmpAsset); } if (updateTreeAsset != null) { updateTreeAsset(); } } }
public void SetBehaviourBinder(AssetBinder binder) { if (binder == null || runtimeBinder == binder) { return; } if (tmpAsset != null) { BehaviourTreeAsset.DestroyAsset(tmpAsset, true); tmpAsset = null; } runner = binder.Runner; tree = binder.Source; runtimeBinder = binder; if (tree != null) { tmpAsset = tree.Clone(); } if (updateTreeAsset != null) { updateTreeAsset(); } }