using System; using Artemis.Storage.Entities.Profile; namespace Artemis.Core.LayerBrushes { /// /// For internal use only, please use or or instead /// public abstract class PropertiesLayerBrush : BaseLayerBrush where T : LayerPropertyGroup, new() { private T _properties = null!; /// /// Gets whether all properties on this brush are initialized /// public bool PropertiesInitialized { get; internal set; } /// public override LayerPropertyGroup BaseProperties => Properties; /// /// Gets the properties of this brush. /// 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 InvalidOperationException("Cannot access brush properties until OnPropertiesInitialized has been called"); return _properties; } internal set => _properties = value; } internal void InitializeProperties(PropertyGroupEntity? propertyGroupEntity) { Properties = new T(); PropertyGroupDescriptionAttribute groupDescription = new() {Identifier = "Brush", Name = Descriptor.DisplayName, Description = Descriptor.Description}; Properties.Initialize(Layer, null, groupDescription, propertyGroupEntity); PropertiesInitialized = true; } } }