using System.Collections.Generic; using UnityObject = UnityEngine.Object; namespace Unity.VisualScripting { public abstract class NesterStateTransition : StateTransition, INesterStateTransition where TGraph : class, IGraph, new() where TMacro : Macro { protected NesterStateTransition() { nest.nester = this; } protected NesterStateTransition(IState source, IState destination) : base(source, destination) { nest.nester = this; } [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; public override IEnumerable GetAotStubs(HashSet visited) { return LinqUtility.Concat(base.GetAotStubs(visited), nest.GetAotStubs(visited)); } protected void CopyFrom(NesterStateTransition source) { base.CopyFrom(source); nest = source.nest; } public abstract TGraph DefaultGraph(); IGraph IGraphParent.DefaultGraph() => DefaultGraph(); void IGraphNester.InstantiateNest() => InstantiateNest(); void IGraphNester.UninstantiateNest() => UninstantiateNest(); } }