BehaviorNodeConfig.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reflection;
  4. using UnityEngine;
  5. namespace Model
  6. {
  7. public class BehaviorNodeConfig: MonoBehaviour
  8. {
  9. public int id;
  10. public string describe;
  11. public BehaviorNodeConfig(string name, string _desc, int _id = 0)
  12. {
  13. this.name = name;
  14. describe = _desc;
  15. id = _id;
  16. }
  17. public BehaviorTreeArgsDict GetArgsDict()
  18. {
  19. BehaviorTreeArgsDict dict = new BehaviorTreeArgsDict();
  20. foreach (BTTypeBaseComponent item in gameObject.GetComponents<BTTypeBaseComponent>())
  21. {
  22. FieldInfo info = item.GetType().GetField("fieldValue");
  23. dict.Add(item.fieldName, info.GetValue(item));
  24. }
  25. return dict;
  26. }
  27. public NodeProto ToNodeProto()
  28. {
  29. return BehaviorNodeConfigToNodeProto(this);
  30. }
  31. private static NodeProto BehaviorNodeConfigToNodeProto(BehaviorNodeConfig behaviorNodeConfig)
  32. {
  33. NodeProto nodeProto = new NodeProto
  34. {
  35. Id = behaviorNodeConfig.id,
  36. Name = behaviorNodeConfig.name,
  37. Desc = behaviorNodeConfig.describe,
  38. Args = behaviorNodeConfig.GetArgsDict(),
  39. children = new List<NodeProto>()
  40. };
  41. foreach (Transform child in behaviorNodeConfig.gameObject.transform)
  42. {
  43. BehaviorNodeConfig nodeConfig = child.gameObject.GetComponent<BehaviorNodeConfig>();
  44. NodeProto childData = BehaviorNodeConfigToNodeProto(nodeConfig);
  45. nodeProto.children.Add(childData);
  46. }
  47. return nodeProto;
  48. }
  49. }
  50. }