BehaviorTreeDesc IBehaviorTreeLoader.LoadTree(string path) { var asset = Resources.Load(path) as BehaviorTreeAsset; if (asset == null) { return(null); } return(BehaviorTreeSerializer.DeserializeDesc(asset.bytes)); }
private void Domain_OnEventApplied(EditorState state, EditorEvent e) { try { var desc = Tree.BuildDesc(); bytes = BehaviorTreeSerializer.SerializeDesc(desc); Logger.Debug("Save behavior tree asset of '{0}'", desc.Title); } catch (Exception ex) { Logger.Debug("Failed to save asset due to error: {0}", ex.Message); } }
private void Awake() { BehaviorTreeSerializer.Initialize(new FlatBuffersSerializer()); treeManager = new BehaviorTreeManager(this); if (asset == null) { return; } var treeDesc = BehaviorTreeSerializer.DeserializeDesc(asset.bytes); tree = treeManager.CreateTree(this, treeDesc); }
public void Deserialize() { if (Domain != null) { return; } var repo = new EditorRepository(); var handler = new BehaviorTreeCommandHandler(); var domain = new EditorDomain(repo, handler); domain.OnEventApplied += Domain_OnEventApplied; var treeId = BehaviorTreeState.GetId(); var tree = new BehaviorTreeState(domain, treeId); tree.Asset = this; repo.States[treeId] = tree; if (bytes != null && bytes.Length > 0) { var treeDesc = BehaviorTreeSerializer.DeserializeDesc(bytes); tree.Title = treeDesc.Title; tree.Comment = treeDesc.Comment; tree.RootTaskId = treeDesc.RootTaskId; if (treeDesc.Tasks != null && treeDesc.Tasks.Length > 0) { tree.NextTaskId = treeDesc.Tasks.Max(t => t.Id) + 1; foreach (var taskDesc in treeDesc.Tasks) { var taskId = TaskState.GetId(taskDesc.Id); var task = new TaskState(domain, taskId); if (taskDesc.Id != treeDesc.RootTaskId) { task.ParentTaskId = EditorHelper.FindParentTask(treeDesc.Tasks, taskDesc.Id).Id; } task.Desc = taskDesc; repo.States[task.Id] = task; } } } Domain = domain; Tree = tree; }
public void TestRestore() { BehaviorTreeSerializer.Initialize(new FlatBuffersSerializer()); var treeManagerOwner = new BehaviorTreeManagerOwner(); var treeManager = new BehaviorTreeManager(treeManagerOwner); var treeOwner = new BehaviorTreeOwner(); var tree1 = treeManager.CreateTree(treeOwner, "WaitTimer", null); Console.WriteLine("============ Tree1 ============"); for (int i = 0; i < 20; i++) { tree1.Update(); treeOwner.Tick(100); } var snapshot1 = tree1.CreateSnapshot(); var data1 = BehaviorTreeSerializer.SerializeProps(snapshot1); var snapshot2 = BehaviorTreeSerializer.DeserializeProps(data1); Console.WriteLine("============ Tree2 ============"); var tree2 = treeManager.CreateTree(treeOwner, "WaitTimer", null); for (int i = 0; i < 30; i++) { tree2.Update(); treeOwner.Tick(100); } Console.WriteLine("============ Tree2 Restore ============"); tree2.RestoreSnapshot(snapshot2); for (int i = 0; i < 1000 && tree2.RootTask.LastResult == TaskResult.Running; i++) { tree2.Update(); treeOwner.Tick(100); } }
public void TestSerialization() { BehaviorTreeSerializer.Initialize(new FlatBuffersSerializer()); var tree1 = BuildTreeDesc(); var data1 = BehaviorTreeSerializer.SerializeDesc(tree1); Assert.IsTrue(data1.Length > 0); var tree2 = BehaviorTreeSerializer.DeserializeDesc(data1); var task1 = tree2.Tasks[0]; Assert.IsTrue(task1.CustomDesc is SequenceTaskDesc); var task2 = tree2.Tasks[1]; Assert.IsTrue(task2.CustomDesc is LogTaskDesc); var task3 = tree2.Tasks[2]; Assert.IsTrue(task3.CustomDesc is WaitTimerTaskDesc); }