Layer effects - Fixed placeholder system

This commit is contained in:
Robert committed 2022-11-12 22:32:04 +01:00
1 parent 9681231215
commit 24cb397556
6 files changed
+49 -32

No files matched your search

@@ -164,12 +164,7 @@ public abstract class BaseLayerEffect : BreakableModel, IDisposable, IStorageMod
// Not only is this needed to initialize properties on the layer effects, it also prevents implementing anything
// but LayerEffect<T> outside the core
internal abstract void Initialize();
internal virtual string GetEffectTypeName()
{
return GetType().Name;
}
internal void InternalUpdate(Timeline timeline)
{
BaseProperties?.Update(timeline);
@@ -220,20 +215,23 @@ public abstract class BaseLayerEffect : BreakableModel, IDisposable, IStorageMod
/// <inheritdoc />
public void Load()
{
HasBeenRenamed = LayerEffectEntity.HasBeenRenamed;
Name = HasBeenRenamed ? LayerEffectEntity.Name : Descriptor.DisplayName;
HasBeenRenamed = LayerEffectEntity.HasBeenRenamed;
Order = LayerEffectEntity.Order;
}
/// <inheritdoc />
public void Save()
{
LayerEffectEntity.ProviderId = Descriptor.Provider.Id;
LayerEffectEntity.EffectType = GetType().FullName;
LayerEffectEntity.Name = Name;
LayerEffectEntity.HasBeenRenamed = HasBeenRenamed;
LayerEffectEntity.Order = Order;
if (Descriptor.IsPlaceholder)
return;
LayerEffectEntity.ProviderId = Descriptor.Provider.Id;
LayerEffectEntity.EffectType = GetType().FullName;
BaseProperties?.ApplyToEntity();
LayerEffectEntity.PropertyGroup = BaseProperties?.PropertyGroupEntity;
}
@@ -19,9 +19,9 @@ public class LayerEffectDescriptor
Provider = provider ?? throw new ArgumentNullException(nameof(provider));
}
internal LayerEffectDescriptor(string placeholderFor, LayerEffectProvider provider)
private LayerEffectDescriptor(LayerEffectProvider provider)
{
PlaceholderFor = placeholderFor ?? throw new ArgumentNullException(nameof(placeholderFor));
IsPlaceholder = true;
Provider = provider ?? throw new ArgumentNullException(nameof(provider));
DisplayName = "Missing effect";
Description = "This effect could not be loaded";
@@ -55,16 +55,21 @@ public class LayerEffectDescriptor
public LayerEffectProvider Provider { get; }
/// <summary>
/// Gets the GUID this descriptor is acting as a placeholder for. If null, this descriptor is not a placeholder
/// Gets a boolean indicating whether this descriptor is a placeholder descriptor.
/// </summary>
public string? PlaceholderFor { get; }
public bool IsPlaceholder { get; }
internal static LayerEffectDescriptor CreatePlaceholder(LayerEffectProvider provider)
{
return new LayerEffectDescriptor(provider);
}
/// <summary>
/// Creates an instance of the described effect and applies it to the render element
/// </summary>
public BaseLayerEffect CreateInstance(RenderProfileElement renderElement, LayerEffectEntity? entity)
{
if (PlaceholderFor != null)
if (IsPlaceholder)
{
if (entity == null)
throw new ArtemisCoreException("Cannot create a placeholder for a layer effect that wasn't loaded from an entity");
@@ -97,10 +102,10 @@ public class LayerEffectDescriptor
private BaseLayerEffect CreatePlaceHolderInstance(RenderProfileElement renderElement, LayerEffectEntity entity)
{
if (PlaceholderFor == null)
if (!IsPlaceholder)
throw new ArtemisCoreException("Cannot create a placeholder instance using a layer effect descriptor that is not a placeholder for anything");
PlaceholderLayerEffect effect = new(entity, PlaceholderFor)
PlaceholderLayerEffect effect = new(entity)
{
ProfileElement = renderElement,
Descriptor = this
@@ -8,10 +8,9 @@ namespace Artemis.Core.LayerEffects.Placeholder;
/// </summary>
internal class PlaceholderLayerEffect : LayerEffect<PlaceholderProperties>
{
internal PlaceholderLayerEffect(LayerEffectEntity originalEntity, string placeholderFor)
internal PlaceholderLayerEffect(LayerEffectEntity originalEntity)
{
OriginalEntity = originalEntity;
PlaceholderFor = placeholderFor;
LayerEffectEntity = originalEntity;
Order = OriginalEntity.Order;
@@ -19,8 +18,6 @@ internal class PlaceholderLayerEffect : LayerEffect<PlaceholderProperties>
HasBeenRenamed = OriginalEntity.HasBeenRenamed;
}
public string PlaceholderFor { get; }
internal LayerEffectEntity OriginalEntity { get; }
/// <inheritdoc />
@@ -47,11 +44,6 @@ internal class PlaceholderLayerEffect : LayerEffect<PlaceholderProperties>
public override void PostProcess(SKCanvas canvas, SKRect bounds, SKPaint paint)
{
}
internal override string GetEffectTypeName()
{
return OriginalEntity.EffectType;
}
}
/// <summary>
@@ -2,9 +2,9 @@
internal static class PlaceholderLayerEffectDescriptor
{
public static LayerEffectDescriptor Create(string missingProviderId)
public static LayerEffectDescriptor Create()
{
LayerEffectDescriptor descriptor = new(missingProviderId, Constants.EffectPlaceholderPlugin);
LayerEffectDescriptor descriptor = LayerEffectDescriptor.CreatePlaceholder(Constants.EffectPlaceholderPlugin);
return descriptor;
}
}