暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

FlowStateTransitionAnalyser.cs 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. namespace Unity.VisualScripting
  4. {
  5. [Analyser(typeof(FlowStateTransition))]
  6. public class FlowStateTransitionAnalyser : NesterStateTransitionAnalyser<FlowStateTransition>
  7. {
  8. public FlowStateTransitionAnalyser(GraphReference reference, FlowStateTransition transition) : base(reference, transition) { }
  9. protected override bool IsTraversed()
  10. {
  11. var graph = transition.nest.graph;
  12. if (graph == null)
  13. {
  14. return false;
  15. }
  16. using (var recursion = Recursion.New(1))
  17. {
  18. foreach (var trigger in graph.GetUnitsRecursive(recursion).OfType<TriggerStateTransition>())
  19. {
  20. if (trigger.Analysis<UnitAnalysis>(context).isEntered)
  21. {
  22. return true;
  23. }
  24. }
  25. }
  26. return false;
  27. }
  28. protected override IEnumerable<Warning> Warnings()
  29. {
  30. foreach (var baseWarning in base.Warnings())
  31. {
  32. yield return baseWarning;
  33. }
  34. var graph = transition.nest.graph;
  35. if (graph == null)
  36. {
  37. yield break;
  38. }
  39. using (var recursion = Recursion.New(1))
  40. {
  41. if (!graph.GetUnitsRecursive(recursion).OfType<IEventUnit>().Any())
  42. {
  43. yield return Warning.Caution("Transition graph is missing an event.");
  44. }
  45. }
  46. using (var recursion = Recursion.New(1))
  47. {
  48. if (!graph.GetUnitsRecursive(recursion).OfType<TriggerStateTransition>().Any())
  49. {
  50. yield return Warning.Caution("Transition graph is missing a trigger unit.");
  51. }
  52. }
  53. }
  54. }
  55. }