mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 03:48:56 +00:00
Modules - Ordering WIP
This commit is contained in:
1 parent
d62d389d9f
commit
bfb122e95a
21 files changed
+535
-45
No files matched your search
@@ -96,13 +96,13 @@ namespace Artemis.Core.Plugins.Modules
|
||||
/// </summary>
|
||||
public abstract class ProfileModule : Module
|
||||
{
|
||||
protected readonly List<PropertyInfo> HiddenPropertiesList = new List<PropertyInfo>();
|
||||
|
||||
protected ProfileModule()
|
||||
{
|
||||
OpacityOverride = 1;
|
||||
}
|
||||
|
||||
protected readonly List<PropertyInfo> HiddenPropertiesList = new List<PropertyInfo>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of all properties ignored at runtime using IgnoreProperty(x => x.y)
|
||||
/// </summary>
|
||||
@@ -115,9 +115,59 @@ namespace Artemis.Core.Plugins.Modules
|
||||
/// </summary>
|
||||
public bool IsProfileUpdatingDisabled { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Update(double deltaTime)
|
||||
/// <summary>
|
||||
/// Overrides the opacity of the root folder
|
||||
/// </summary>
|
||||
public double OpacityOverride { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates whether or not a profile change is being animated
|
||||
/// </summary>
|
||||
public bool AnimatingProfileChange { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called before the profile updates, this is the best place to perform data model updates
|
||||
/// </summary>
|
||||
/// <param name="deltaTime">Time in seconds since the last update</param>
|
||||
public virtual void ProfileUpdate(double deltaTime)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called after the profile has updated
|
||||
/// </summary>
|
||||
/// <param name="deltaTime">Time in seconds since the last update</param>
|
||||
public virtual void ProfileUpdated(double deltaTime)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called before the profile renders
|
||||
/// </summary>
|
||||
/// <param name="deltaTime">Time since the last render</param>
|
||||
/// <param name="surface">The RGB Surface to render to</param>
|
||||
/// <param name="canvas"></param>
|
||||
/// <param name="canvasInfo"></param>
|
||||
public virtual void ProfileRender(double deltaTime, ArtemisSurface surface, SKCanvas canvas, SKImageInfo canvasInfo)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called after the profile has rendered
|
||||
/// </summary>
|
||||
/// <param name="deltaTime">Time since the last render</param>
|
||||
/// <param name="surface">The RGB Surface to render to</param>
|
||||
/// <param name="canvas"></param>
|
||||
/// <param name="canvasInfo"></param>
|
||||
public virtual void ProfileRendered(double deltaTime, ArtemisSurface surface, SKCanvas canvas, SKImageInfo canvasInfo)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public sealed override void Update(double deltaTime)
|
||||
{
|
||||
ProfileUpdate(deltaTime);
|
||||
|
||||
lock (this)
|
||||
{
|
||||
OpacityOverride = AnimatingProfileChange
|
||||
@@ -128,16 +178,22 @@ namespace Artemis.Core.Plugins.Modules
|
||||
if (!IsProfileUpdatingDisabled)
|
||||
ActiveProfile?.Update(deltaTime);
|
||||
}
|
||||
|
||||
ProfileUpdated(deltaTime);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Render(double deltaTime, ArtemisSurface surface, SKCanvas canvas, SKImageInfo canvasInfo)
|
||||
public sealed override void Render(double deltaTime, ArtemisSurface surface, SKCanvas canvas, SKImageInfo canvasInfo)
|
||||
{
|
||||
ProfileRender(deltaTime, surface, canvas, canvasInfo);
|
||||
|
||||
lock (this)
|
||||
{
|
||||
// Render the profile
|
||||
ActiveProfile?.Render(deltaTime, canvas, canvasInfo);
|
||||
}
|
||||
|
||||
ProfileRendered(deltaTime, surface, canvas, canvasInfo);
|
||||
}
|
||||
|
||||
internal async Task ChangeActiveProfileAnimated(Profile profile, ArtemisSurface surface)
|
||||
@@ -183,16 +239,6 @@ namespace Artemis.Core.Plugins.Modules
|
||||
OnActiveProfileChanged();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the opacity of the root folder
|
||||
/// </summary>
|
||||
public double OpacityOverride { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates whether or not a profile change is being animated
|
||||
/// </summary>
|
||||
public bool AnimatingProfileChange { get; private set; }
|
||||
|
||||
internal override void Deactivate(bool isOverride)
|
||||
{
|
||||
base.Deactivate(isOverride);
|
||||
|
||||
@@ -44,18 +44,17 @@ namespace Artemis.Core.Services
|
||||
|
||||
public async Task SetActiveModuleOverride(Module overrideModule)
|
||||
{
|
||||
await ActiveModuleSemaphore.WaitAsync();
|
||||
|
||||
if (ActiveModuleOverride == overrideModule)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
ActiveModuleOverride = overrideModule;
|
||||
await ActiveModuleSemaphore.WaitAsync();
|
||||
|
||||
if (ActiveModuleOverride == overrideModule)
|
||||
return;
|
||||
|
||||
// If set to null, resume regular activation
|
||||
if (ActiveModuleOverride == null)
|
||||
if (overrideModule == null)
|
||||
{
|
||||
ActiveModuleOverride = null;
|
||||
_logger.Information("Cleared active module override");
|
||||
return;
|
||||
}
|
||||
@@ -65,14 +64,15 @@ namespace Artemis.Core.Services
|
||||
var tasks = new List<Task>();
|
||||
foreach (var module in modules)
|
||||
{
|
||||
if (module != ActiveModuleOverride)
|
||||
if (module != overrideModule)
|
||||
tasks.Add(DeactivateModule(module, true));
|
||||
}
|
||||
|
||||
if (!ActiveModuleOverride.IsActivated)
|
||||
tasks.Add(ActivateModule(ActiveModuleOverride, true));
|
||||
if (!overrideModule.IsActivated)
|
||||
tasks.Add(ActivateModule(overrideModule, true));
|
||||
|
||||
await Task.WhenAll(tasks);
|
||||
ActiveModuleOverride = overrideModule;
|
||||
|
||||
_logger.Information($"Set active module override to {ActiveModuleOverride.DisplayName}");
|
||||
}
|
||||
@@ -88,13 +88,13 @@ namespace Artemis.Core.Services
|
||||
|
||||
public async Task UpdateModuleActivation()
|
||||
{
|
||||
if (ActiveModuleOverride != null)
|
||||
return;
|
||||
|
||||
await ActiveModuleSemaphore.WaitAsync();
|
||||
|
||||
try
|
||||
{
|
||||
await ActiveModuleSemaphore.WaitAsync();
|
||||
|
||||
if (ActiveModuleOverride != null)
|
||||
return;
|
||||
|
||||
var stopwatch = new Stopwatch();
|
||||
stopwatch.Start();
|
||||
|
||||
@@ -129,19 +129,19 @@ namespace Artemis.Core.Services
|
||||
modules.Remove(module);
|
||||
|
||||
if (modules.Count == 0)
|
||||
priority = 1;
|
||||
else if (priority < 1)
|
||||
priority = 1;
|
||||
priority = 0;
|
||||
else if (priority < 0)
|
||||
priority = 0;
|
||||
else if (priority > modules.Count)
|
||||
priority = modules.Count;
|
||||
|
||||
module.PriorityCategory = category;
|
||||
modules.Insert(priority - 1, module);
|
||||
modules.Insert(priority, module);
|
||||
|
||||
for (var index = 0; index < modules.Count; index++)
|
||||
{
|
||||
var categoryModule = modules[index];
|
||||
categoryModule.Priority = index + 1;
|
||||
categoryModule.Priority = index;
|
||||
categoryModule.ApplyToEntity();
|
||||
|
||||
_moduleRepository.Save(categoryModule.Entity);
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using Artemis.Core.Extensions;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Models.Surface;
|
||||
using Artemis.Core.Plugins.Modules;
|
||||
using Artemis.Core.Services.Storage.Interfaces;
|
||||
using Artemis.Storage.Entities.Profile;
|
||||
|
||||
Reference in new issue
Block a user