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 NesterState<TGraph, TMacro> : State, INesterState
7 where TGraph : class, IGraph, new()
8 where TMacro : Macro<TGraph>
9 {
10 protected NesterState()
11 {
12 nest.nester = this;
13 }
14
15 protected NesterState(TMacro macro)
16 {
17 nest.nester = this;
18 nest.macro = macro;
19 nest.source = GraphSource.Macro;
20 }
21
22 [Serialize]
23 public GraphNest<TGraph, TMacro> nest { get; private set; } = new GraphNest<TGraph, TMacro>();
24
25 [DoNotSerialize]
26 IGraphNest IGraphNester.nest => nest;
27
28 [DoNotSerialize]
29 IGraph IGraphParent.childGraph => nest.graph;
30
31 [DoNotSerialize]
32 bool IGraphParent.isSerializationRoot => nest.source == GraphSource.Macro;
33
34 [DoNotSerialize]
35 UnityObject IGraphParent.serializedObject => nest.macro;
36
37 [DoNotSerialize]
38 public override IEnumerable<ISerializationDependency> deserializationDependencies => nest.deserializationDependencies;
39
40 protected void CopyFrom(NesterState<TGraph, TMacro> source)
41 {
42 base.CopyFrom(source);
43
44 nest = source.nest;
45 }
46
47 public override IEnumerable<object> GetAotStubs(HashSet<object> visited)
48 {
49 return LinqUtility.Concat<object>(base.GetAotStubs(visited), nest.GetAotStubs(visited));
50 }
51
52 public abstract TGraph DefaultGraph();
53
54 IGraph IGraphParent.DefaultGraph() => DefaultGraph();
55
56 void IGraphNester.InstantiateNest() => InstantiateNest();
57
58 void IGraphNester.UninstantiateNest() => UninstantiateNest();
59 }
60}