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