BehaviorTreeViewModel.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System.Collections.ObjectModel;
  2. using System.ComponentModel.Composition;
  3. namespace BehaviorTree
  4. {
  5. [Export(typeof (BehaviorTreeViewModel))]
  6. [PartCreationPolicy(CreationPolicy.NonShared)]
  7. internal class BehaviorTreeViewModel
  8. {
  9. private readonly ObservableCollection<TreeNodeViewModel> treeNodes = new ObservableCollection<TreeNodeViewModel>();
  10. public ObservableCollection<TreeNodeViewModel> TreeNodes
  11. {
  12. get
  13. {
  14. return treeNodes;
  15. }
  16. }
  17. private TreeNodeViewModel Root
  18. {
  19. get
  20. {
  21. return treeNodes.Count == 0? null : treeNodes[0];
  22. }
  23. }
  24. public void Add(TreeNode treeNode, TreeNodeViewModel parent)
  25. {
  26. var treeNodeViewModel = new TreeNodeViewModel(treeNode, parent);
  27. treeNodes.Add(treeNodeViewModel);
  28. if (parent != null)
  29. {
  30. parent.Children.Add(treeNodeViewModel);
  31. }
  32. BehaviorTreeLayout.ExcuteLayout(Root);
  33. }
  34. public void Remove(TreeNodeViewModel treeNodeViewModel)
  35. {
  36. for (int i = treeNodeViewModel.Children.Count - 1; i >= 0; --i)
  37. {
  38. Remove(treeNodeViewModel.Children[i]);
  39. }
  40. treeNodeViewModel.Parent.Children.Remove(treeNodeViewModel);
  41. treeNodes.Remove(treeNodeViewModel);
  42. BehaviorTreeLayout.ExcuteLayout(Root);
  43. }
  44. }
  45. }