A game about forced loneliness, made by TACStudios
1using System.Collections.Generic;
2using UnityObject = UnityEngine.Object;
3
4namespace Unity.VisualScripting
5{
6 public abstract class NesterStateTransition<TGraph, TMacro> : StateTransition, INesterStateTransition
7 where TGraph : class, IGraph, new()
8 where TMacro : Macro<TGraph>
9 {
10 protected NesterStateTransition()
11 {
12 nest.nester = this;
13 }
14
15 protected NesterStateTransition(IState source, IState destination) : base(source, destination)
16 {
17 nest.nester = this;
18 }
19
20 [Serialize]
21 public GraphNest<TGraph, TMacro> nest { get; private set; } = new GraphNest<TGraph, TMacro>();
22
23 [DoNotSerialize]
24 IGraphNest IGraphNester.nest => nest;
25
26 [DoNotSerialize]
27 IGraph IGraphParent.childGraph => nest.graph;
28
29 [DoNotSerialize]
30 bool IGraphParent.isSerializationRoot => nest.source == GraphSource.Macro;
31
32 [DoNotSerialize]
33 UnityObject IGraphParent.serializedObject => nest.macro;
34
35 [DoNotSerialize]
36 public override IEnumerable<ISerializationDependency> deserializationDependencies => nest.deserializationDependencies;
37
38 public override IEnumerable<object> GetAotStubs(HashSet<object> visited)
39 {
40 return LinqUtility.Concat<object>(base.GetAotStubs(visited), nest.GetAotStubs(visited));
41 }
42
43 protected void CopyFrom(NesterStateTransition<TGraph, TMacro> source)
44 {
45 base.CopyFrom(source);
46
47 nest = source.nest;
48 }
49
50 public abstract TGraph DefaultGraph();
51
52 IGraph IGraphParent.DefaultGraph() => DefaultGraph();
53
54 void IGraphNester.InstantiateNest() => InstantiateNest();
55
56 void IGraphNester.UninstantiateNest() => UninstantiateNest();
57 }
58}