using System; using Artemis.Core.Models.Profile; using Artemis.Core.Plugins.Exceptions; using Artemis.Core.Services.Interfaces; namespace Artemis.Core.Plugins.LayerEffect.Abstract { /// /// For internal use only, please use instead /// public abstract class LayerEffect : BaseLayerEffect where T : LayerPropertyGroup { private T _properties; /// /// Gets whether all properties on this effect are initialized /// public bool PropertiesInitialized { get; internal set; } /// public override LayerPropertyGroup BaseProperties => Properties; /// /// Gets the properties of this effect. /// public T Properties { get { // I imagine a null reference here can be confusing, so lets throw an exception explaining what to do if (_properties == null) throw new ArtemisPluginException("Cannot access effect properties until OnPropertiesInitialized has been called"); return _properties; } internal set => _properties = value; } /// /// Called when all layer properties in this effect have been initialized /// protected virtual void OnPropertiesInitialized() { } internal void InitializeProperties(ILayerService layerService) { Properties = Activator.CreateInstance(); Properties.InitializeProperties(layerService, Layer, "LayerEffect."); OnPropertiesInitialized(); PropertiesInitialized = true; } internal override void Initialize(ILayerService layerService) { InitializeProperties(layerService); } } }