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