Profiles - Finished dispose implementation

Profiles - Added transition between active profiles
Core - Added startup animation
This commit is contained in:
Robert committed 2020-08-10 19:16:21 +02:00
1 parent c0bdd8cf26
commit d955bc8635
43 files changed
+1908 -361

No files matched your search

@@ -4,6 +4,7 @@ using System.Collections.ObjectModel;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading.Tasks;
using Artemis.Core.Exceptions;
using Artemis.Core.Models.Profile;
using Artemis.Core.Models.Surface;
@@ -94,6 +95,11 @@ namespace Artemis.Core.Plugins.Abstract
/// </summary>
public abstract class ProfileModule : Module
{
protected ProfileModule()
{
OpacityOverride = 1;
}
protected readonly List<PropertyInfo> HiddenPropertiesList = new List<PropertyInfo>();
/// <summary>
@@ -113,6 +119,10 @@ namespace Artemis.Core.Plugins.Abstract
{
lock (this)
{
OpacityOverride = AnimatingProfileChange
? Math.Max(0, OpacityOverride - 0.1)
: Math.Min(1, OpacityOverride + 0.1);
// Update the profile
if (!IsProfileUpdatingDisabled)
ActiveProfile?.Update(deltaTime);
@@ -129,6 +139,27 @@ namespace Artemis.Core.Plugins.Abstract
}
}
internal async Task ChangeActiveProfileAnimated(Profile profile, ArtemisSurface surface)
{
if (profile != null && profile.Module != this)
throw new ArtemisCoreException($"Cannot activate a profile of module {profile.Module} on a module of plugin {PluginInfo}.");
if (profile == ActiveProfile || AnimatingProfileChange)
return;
AnimatingProfileChange = true;
while (OpacityOverride > 0)
await Task.Delay(50);
ChangeActiveProfile(profile, surface);
AnimatingProfileChange = false;
while (OpacityOverride < 1)
await Task.Delay(50);
}
internal void ChangeActiveProfile(Profile profile, ArtemisSurface surface)
{
if (profile != null && profile.Module != this)
@@ -147,6 +178,16 @@ namespace Artemis.Core.Plugins.Abstract
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; }
#region Events
public event EventHandler ActiveProfileChanged;
@@ -52,6 +52,8 @@ namespace Artemis.Core.Plugins.LayerBrush.Abstract
{
var artemisLed = Layer.Leds[index];
var renderPoint = points[index * 2 + 1];
if (!float.IsFinite(renderPoint.X) || !float.IsFinite(renderPoint.Y))
continue;
// Let the brush determine the color
ledPaint.Color = GetColor(artemisLed, renderPoint);