mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 11:56:30 +00:00
Layer effects - WIP commit
Profile editor - Show brush icons at different parts in the editor
This commit is contained in:
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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user