using System.Collections.Generic; using UnityObject = UnityEngine.Object; namespace Unity.VisualScripting { public abstract class NesterState : State, INesterState where TGraph : class, IGraph, new() where TMacro : Macro { protected NesterState() { nest.nester = this; } protected NesterState(TMacro macro) { nest.nester = this; nest.macro = macro; nest.source = GraphSource.Macro; } [Serialize] public GraphNest nest { get; private set; } = new GraphNest(); [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 deserializationDependencies => nest.deserializationDependencies; protected void CopyFrom(NesterState source) { base.CopyFrom(source); nest = source.nest; } [DoNotSerialize] public override IEnumerable aotStubs => LinqUtility.Concat(base.aotStubs, nest.aotStubs); public abstract TGraph DefaultGraph(); IGraph IGraphParent.DefaultGraph() => DefaultGraph(); void IGraphNester.InstantiateNest() => InstantiateNest(); void IGraphNester.UninstantiateNest() => UninstantiateNest(); } }