Layer effects - WIP commit

Profile editor - Show brush icons at different parts in the editor
This commit is contained in:
SpoinkyNL committed 2020-06-10 00:20:43 +02:00
1 parent ac23d89f3e
commit f178c3d790
28 files changed
+618 -63

No files matched your search

@@ -1,6 +1,8 @@
using Artemis.Core.Models.Profile;
using Artemis.Core.Plugins.LayerBrush;
using Artemis.Core.Plugins.LayerBrush.Abstract;
using Artemis.Core.Plugins.LayerEffect;
using Artemis.Core.Plugins.LayerEffect.Abstract;
namespace Artemis.Core.Services.Interfaces
{
@@ -23,5 +25,14 @@ namespace Artemis.Core.Services.Interfaces
/// <param name="layer">The layer to instantiate the brush for</param>
/// <returns></returns>
BaseLayerBrush InstantiateLayerBrush(Layer layer);
/// <summary>
/// Instantiates and adds the <see cref="BaseLayerEffect" /> described by the provided
/// <see cref="LayerEffectDescriptor" />
/// to the <see cref="Layer" />.
/// </summary>
/// <param name="layer">The layer to instantiate the effect for</param>
/// <returns></returns>
BaseLayerEffect InstantiateLayerEffect(Layer layer);
}
}
+32 -1
View File
@@ -5,6 +5,7 @@ using Artemis.Core.Models.Profile;
using Artemis.Core.Plugins.Abstract;
using Artemis.Core.Plugins.LayerBrush;
using Artemis.Core.Plugins.LayerBrush.Abstract;
using Artemis.Core.Plugins.LayerEffect.Abstract;
using Artemis.Core.Services.Interfaces;
using Ninject;
using Ninject.Parameters;
@@ -34,8 +35,9 @@ namespace Artemis.Core.Services
layer.General.InitializeProperties(this, layer, "General.");
layer.Transform.InitializeProperties(this, layer, "Transform.");
// With the properties loaded, the layer brush can be instantiated
// With the properties loaded, the layer brush and effect can be instantiated
InstantiateLayerBrush(layer);
InstantiateLayerEffect(layer);
return layer;
}
@@ -68,5 +70,34 @@ namespace Artemis.Core.Services
return brush;
}
public BaseLayerEffect InstantiateLayerEffect(Layer layer)
{
layer.DeactivateLayerEffect();
var descriptorReference = layer.General.EffectReference?.CurrentValue;
if (descriptorReference == null)
return null;
// Get a matching descriptor
var layerEffectProviders = _pluginService.GetPluginsOfType<LayerEffectProvider>();
var descriptors = layerEffectProviders.SelectMany(l => l.LayerEffectDescriptors).ToList();
var descriptor = descriptors.FirstOrDefault(d => d.LayerEffectProvider.PluginInfo.Guid == descriptorReference.EffectPluginGuid &&
d.LayerEffectType.Name == descriptorReference.EffectType);
if (descriptor == null)
return null;
var effect = (BaseLayerEffect)_kernel.Get(descriptor.LayerEffectType);
effect.Layer = layer;
effect.Descriptor = descriptor;
layer.LayerEffect = effect;
effect.Initialize(this);
effect.Update(0);
layer.OnLayerEffectUpdated();
return effect;
}
}
}
@@ -94,7 +94,7 @@ namespace Artemis.Core.Services.Storage
if (profile != null)
{
InitializeLayerProperties(profile);
InstantiateLayerBrushes(profile);
InstantiateLayers(profile);
}
}
@@ -165,22 +165,25 @@ namespace Artemis.Core.Services.Storage
private void InitializeLayerProperties(Profile profile)
{
foreach (var layer in profile.GetAllLayers().Where(l => l.LayerBrush == null))
foreach (var layer in profile.GetAllLayers())
{
if (!layer.General.PropertiesInitialized)
layer.General.InitializeProperties(_layerService, layer, "General.");
if (!layer.Transform.PropertiesInitialized)
layer.Transform.InitializeProperties(_layerService, layer, "Transform.");
}
;
}
private void InstantiateLayerBrushes(Profile profile)
private void InstantiateLayers(Profile profile)
{
// Only instantiate brushes for layers without an existing brush instance
foreach (var layer in profile.GetAllLayers().Where(l => l.LayerBrush == null))
_layerService.InstantiateLayerBrush(layer);
// Only instantiate brushes for layers without an existing brush/effect instance
foreach (var layer in profile.GetAllLayers())
{
if (layer.LayerBrush == null)
_layerService.InstantiateLayerBrush(layer);
if (layer.LayerEffect == null)
_layerService.InstantiateLayerEffect(layer);
}
}
private void ActiveProfilesPopulateLeds(ArtemisSurface surface)
@@ -194,7 +197,7 @@ namespace Artemis.Core.Services.Storage
{
var profileModules = _pluginService.GetPluginsOfType<ProfileModule>();
foreach (var profileModule in profileModules.Where(p => p.ActiveProfile != null).ToList())
InstantiateLayerBrushes(profileModule.ActiveProfile);
InstantiateLayers(profileModule.ActiveProfile);
}
#region Event handlers