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