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}