using System; using UnityEngine; namespace UnityAtoms.BaseAtoms { /// /// Creates an in memory copy of a Collection using a base. /// /// /// [EditorIcon("atom-icon-hotpink")] [DefaultExecutionOrder(Runtime.ExecutionOrder.VARIABLE_INSTANCER)] public abstract class AtomBaseCollectionInstancer : AtomBaseVariableInstancer where V : AtomBaseVariable, IWithCollectionEvents { public AtomBaseVariableEvent Added { get => ((V)_inMemoryCopy).Added; set => ((V)_inMemoryCopy).Added = value; } public AtomBaseVariableEvent Removed { get => ((V)_inMemoryCopy).Removed; set => ((V)_inMemoryCopy).Removed = value; } public VoidEvent Cleared { get => ((V)_inMemoryCopy).Cleared; set => ((V)_inMemoryCopy).Cleared = value; } /// /// Creates in memory copies of the Added, Removed and Cleared Events on OnEnable. /// protected override void ImplSpecificSetup() { var baseCollection = (V)Base; var inMemoryCopy = (V)_inMemoryCopy; if (baseCollection.Added != null) { inMemoryCopy.Added = Instantiate(baseCollection.Added); } if (baseCollection.Removed != null) { inMemoryCopy.Removed = Instantiate(baseCollection.Removed); } if (baseCollection.Cleared != null) { inMemoryCopy.Cleared = Instantiate(baseCollection.Cleared); } } } }