mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Tweening config backend
This commit is contained in:
parent
31b51e561a
commit
041a2db6e2
@ -19,7 +19,8 @@ namespace Artemis.Profiles.Layers.Models
|
|||||||
public LayerModel()
|
public LayerModel()
|
||||||
{
|
{
|
||||||
Children = new ChildItemCollection<LayerModel, LayerModel>(this);
|
Children = new ChildItemCollection<LayerModel, LayerModel>(this);
|
||||||
TweenModel = new TweenModel(this, 200);
|
TweenModel = new TweenModel(this);
|
||||||
|
|
||||||
var model = Properties as KeyboardPropertiesModel;
|
var model = Properties as KeyboardPropertiesModel;
|
||||||
if (model != null)
|
if (model != null)
|
||||||
GifImage = new GifImage(model.GifFile);
|
GifImage = new GifImage(model.GifFile);
|
||||||
@ -53,8 +54,9 @@ namespace Artemis.Profiles.Layers.Models
|
|||||||
LayerType.Update(this, dataModel, preview);
|
LayerType.Update(this, dataModel, preview);
|
||||||
LayerAnimation?.Update(this, updateAnimations);
|
LayerAnimation?.Update(this, updateAnimations);
|
||||||
|
|
||||||
TweenModel.Update();
|
if (!preview && updateAnimations)
|
||||||
|
TweenModel.Update();
|
||||||
|
|
||||||
LastRender = DateTime.Now;
|
LastRender = DateTime.Now;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
@ -26,6 +27,16 @@ namespace Artemis.Profiles.Layers.Models
|
|||||||
Conditions = source.Conditions;
|
Conditions = source.Conditions;
|
||||||
DynamicProperties = source.DynamicProperties;
|
DynamicProperties = source.DynamicProperties;
|
||||||
Brush = source.Brush;
|
Brush = source.Brush;
|
||||||
|
XEase = source.XEase;
|
||||||
|
YEase = source.YEase;
|
||||||
|
HeightEase = source.HeightEase;
|
||||||
|
WidthEase = source.WidthEase;
|
||||||
|
OpacityEase = source.OpacityEase;
|
||||||
|
XEaseTime = source.XEaseTime;
|
||||||
|
YEaseTime = source.YEaseTime;
|
||||||
|
HeightEaseTime = source.HeightEaseTime;
|
||||||
|
WidthEaseTime = source.WidthEaseTime;
|
||||||
|
OpacityEaseTime = source.OpacityEaseTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double X { get; set; }
|
public double X { get; set; }
|
||||||
@ -35,6 +46,16 @@ namespace Artemis.Profiles.Layers.Models
|
|||||||
public bool Contain { get; set; }
|
public bool Contain { get; set; }
|
||||||
public double Opacity { get; set; }
|
public double Opacity { get; set; }
|
||||||
public double AnimationSpeed { get; set; }
|
public double AnimationSpeed { get; set; }
|
||||||
|
public double OpacityEaseTime { get; set; }
|
||||||
|
public double HeightEaseTime { get; set; }
|
||||||
|
public double WidthEaseTime { get; set; }
|
||||||
|
public double YEaseTime { get; set; }
|
||||||
|
public double XEaseTime { get; set; }
|
||||||
|
public string XEase { get; set; }
|
||||||
|
public string YEase { get; set; }
|
||||||
|
public string WidthEase { set; get; }
|
||||||
|
public string HeightEase { get; set; }
|
||||||
|
public string OpacityEase { get; set; }
|
||||||
public List<LayerConditionModel> Conditions { get; set; } = new List<LayerConditionModel>();
|
public List<LayerConditionModel> Conditions { get; set; } = new List<LayerConditionModel>();
|
||||||
public List<DynamicPropertiesModel> DynamicProperties { get; set; } = new List<DynamicPropertiesModel>();
|
public List<DynamicPropertiesModel> DynamicProperties { get; set; } = new List<DynamicPropertiesModel>();
|
||||||
|
|
||||||
|
|||||||
@ -17,64 +17,36 @@ namespace Artemis.Profiles.Layers.Models
|
|||||||
private float _y;
|
private float _y;
|
||||||
private Tweener<float> _yTweener;
|
private Tweener<float> _yTweener;
|
||||||
|
|
||||||
public TweenModel(LayerModel layerModel, double defaultDuration)
|
public TweenModel(LayerModel layerModel)
|
||||||
{
|
{
|
||||||
_layerModel = layerModel;
|
_layerModel = layerModel;
|
||||||
|
|
||||||
XDuration = defaultDuration;
|
_xTweener = new Tweener<float>((float) layerModel.X, (float) layerModel.X, 0);
|
||||||
YDuration = defaultDuration;
|
_yTweener = new Tweener<float>((float) layerModel.Y, (float) layerModel.Y, 0);
|
||||||
WidthDuration = defaultDuration;
|
_widthTweener = new Tweener<float>((float) layerModel.Width, (float) layerModel.Width, 0);
|
||||||
HeightDuration = defaultDuration;
|
_heightTweener = new Tweener<float>((float) layerModel.Height, (float) layerModel.Height, 0);
|
||||||
OpacityDuration = defaultDuration;
|
_opacityTweener = new Tweener<float>((float) layerModel.Opacity, (float) layerModel.Opacity, 0);
|
||||||
|
|
||||||
XFunc = Ease.Quad.InOut;
|
|
||||||
YFunc = Ease.Quad.InOut;
|
|
||||||
WidthFunc = Ease.Quad.InOut;
|
|
||||||
HeightFunc = Ease.Quad.InOut;
|
|
||||||
OpacityFunc = Ease.Quad.InOut;
|
|
||||||
|
|
||||||
_xTweener = new Tweener<float>(0, (float) layerModel.X, XDuration, XFunc);
|
|
||||||
_yTweener = new Tweener<float>(0, (float) layerModel.Y, YDuration, YFunc);
|
|
||||||
_widthTweener = new Tweener<float>(0, (float) layerModel.Width, WidthDuration, WidthFunc);
|
|
||||||
_heightTweener = new Tweener<float>(0, (float) layerModel.Height, HeightDuration, HeightFunc);
|
|
||||||
_opacityTweener = new Tweener<float>(0, (float) layerModel.Opacity, OpacityDuration, OpacityFunc);
|
|
||||||
|
|
||||||
StoreCurrentValues();
|
StoreCurrentValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
public double XDuration { get; set; }
|
|
||||||
public double YDuration { get; set; }
|
|
||||||
public double WidthDuration { get; set; }
|
|
||||||
public double HeightDuration { get; set; }
|
|
||||||
public double OpacityDuration { get; set; }
|
|
||||||
|
|
||||||
public EaseFunc XFunc { get; set; }
|
|
||||||
public EaseFunc YFunc { get; set; }
|
|
||||||
public EaseFunc WidthFunc { get; set; }
|
|
||||||
public EaseFunc HeightFunc { get; set; }
|
|
||||||
public EaseFunc OpacityFunc { get; set; }
|
|
||||||
|
|
||||||
private void StoreCurrentValues()
|
|
||||||
{
|
|
||||||
_x = (float) _layerModel.X;
|
|
||||||
_y = (float) _layerModel.Y;
|
|
||||||
_width = (float) _layerModel.Width;
|
|
||||||
_height = (float) _layerModel.Height;
|
|
||||||
_opacity = (float) _layerModel.Opacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (Math.Abs(_layerModel.X - _x) > 0.001)
|
if (Math.Abs(_layerModel.X - _x) > 0.001)
|
||||||
_xTweener = new Tweener<float>(_x, (float) _layerModel.X, XDuration, XFunc);
|
_xTweener = new Tweener<float>(_x, (float) _layerModel.X, _layerModel.Properties.XEaseTime,
|
||||||
|
GetEaseFunction(_layerModel.Properties.XEase));
|
||||||
if (Math.Abs(_layerModel.Y - _y) > 0.001)
|
if (Math.Abs(_layerModel.Y - _y) > 0.001)
|
||||||
_yTweener = new Tweener<float>(_y, (float) _layerModel.Y, YDuration, YFunc);
|
_yTweener = new Tweener<float>(_y, (float) _layerModel.Y, _layerModel.Properties.YEaseTime,
|
||||||
|
GetEaseFunction(_layerModel.Properties.YEase));
|
||||||
if (Math.Abs(_layerModel.Width - _width) > 0.001)
|
if (Math.Abs(_layerModel.Width - _width) > 0.001)
|
||||||
_widthTweener = new Tweener<float>(_width, (float) _layerModel.Width, WidthDuration, WidthFunc);
|
_widthTweener = new Tweener<float>(_width, (float) _layerModel.Width,
|
||||||
|
_layerModel.Properties.WidthEaseTime, GetEaseFunction(_layerModel.Properties.WidthEase));
|
||||||
if (Math.Abs(_layerModel.Height - _height) > 0.001)
|
if (Math.Abs(_layerModel.Height - _height) > 0.001)
|
||||||
_heightTweener = new Tweener<float>(_height, (float) _layerModel.Height, HeightDuration, HeightFunc);
|
_heightTweener = new Tweener<float>(_height, (float) _layerModel.Height,
|
||||||
|
_layerModel.Properties.HeightEaseTime, GetEaseFunction(_layerModel.Properties.HeightEase));
|
||||||
if (Math.Abs(_layerModel.Opacity - _opacity) > 0.001)
|
if (Math.Abs(_layerModel.Opacity - _opacity) > 0.001)
|
||||||
_opacityTweener = new Tweener<float>(_opacity, (float) _layerModel.Opacity, OpacityDuration, OpacityFunc);
|
_opacityTweener = new Tweener<float>(_opacity, (float) _layerModel.Opacity,
|
||||||
|
_layerModel.Properties.OpacityEaseTime, GetEaseFunction(_layerModel.Properties.OpacityEase));
|
||||||
|
|
||||||
_xTweener.Update(40);
|
_xTweener.Update(40);
|
||||||
_yTweener.Update(40);
|
_yTweener.Update(40);
|
||||||
@ -90,5 +62,29 @@ namespace Artemis.Profiles.Layers.Models
|
|||||||
_layerModel.Height = _heightTweener.Value;
|
_layerModel.Height = _heightTweener.Value;
|
||||||
_layerModel.Opacity = _opacityTweener.Value;
|
_layerModel.Opacity = _opacityTweener.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void StoreCurrentValues()
|
||||||
|
{
|
||||||
|
_x = (float) _layerModel.X;
|
||||||
|
_y = (float) _layerModel.Y;
|
||||||
|
_width = (float) _layerModel.Width;
|
||||||
|
_height = (float) _layerModel.Height;
|
||||||
|
_opacity = (float) _layerModel.Opacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static EaseFunc GetEaseFunction(string functionName)
|
||||||
|
{
|
||||||
|
switch (functionName)
|
||||||
|
{
|
||||||
|
case "In":
|
||||||
|
return Ease.Quint.In;
|
||||||
|
case "Out":
|
||||||
|
return Ease.Quint.Out;
|
||||||
|
case "InOut":
|
||||||
|
return Ease.Quint.InOut;
|
||||||
|
default:
|
||||||
|
return Ease.Linear;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -26,9 +26,9 @@ namespace Artemis.Profiles.Layers.Types.Audio
|
|||||||
private readonly MMDevice _device;
|
private readonly MMDevice _device;
|
||||||
private readonly SampleAggregator _sampleAggregator = new SampleAggregator(1024);
|
private readonly SampleAggregator _sampleAggregator = new SampleAggregator(1024);
|
||||||
private readonly WasapiLoopbackCapture _waveIn;
|
private readonly WasapiLoopbackCapture _waveIn;
|
||||||
|
private DateTime _lastAudioUpdate;
|
||||||
private int _lines;
|
private int _lines;
|
||||||
private AudioPropertiesModel _previousSettings;
|
private AudioPropertiesModel _previousSettings;
|
||||||
private DateTime _lastAudioUpdate;
|
|
||||||
|
|
||||||
public AudioType()
|
public AudioType()
|
||||||
{
|
{
|
||||||
@ -37,7 +37,7 @@ namespace Artemis.Profiles.Layers.Types.Audio
|
|||||||
|
|
||||||
_sampleAggregator.FftCalculated += FftCalculated;
|
_sampleAggregator.FftCalculated += FftCalculated;
|
||||||
_sampleAggregator.PerformFFT = true;
|
_sampleAggregator.PerformFFT = true;
|
||||||
|
|
||||||
// Start listening for sound data
|
// Start listening for sound data
|
||||||
_waveIn = new WasapiLoopbackCapture();
|
_waveIn = new WasapiLoopbackCapture();
|
||||||
_waveIn.DataAvailable += OnDataAvailable;
|
_waveIn.DataAvailable += OnDataAvailable;
|
||||||
@ -223,8 +223,6 @@ namespace Artemis.Profiles.Layers.Types.Audio
|
|||||||
audioLayer.Properties.Width = settings.Width;
|
audioLayer.Properties.Width = settings.Width;
|
||||||
audioLayer.Properties.Height = settings.Height;
|
audioLayer.Properties.Height = settings.Height;
|
||||||
audioLayer.LayerAnimation?.Update(audioLayer, true);
|
audioLayer.LayerAnimation?.Update(audioLayer, true);
|
||||||
|
|
||||||
audioLayer.TweenModel.Update();
|
|
||||||
|
|
||||||
// Restore the height and width
|
// Restore the height and width
|
||||||
audioLayer.Properties.Height = oldHeight;
|
audioLayer.Properties.Height = oldHeight;
|
||||||
@ -329,9 +327,9 @@ namespace Artemis.Profiles.Layers.Types.Audio
|
|||||||
// TODO: Check how often this is called
|
// TODO: Check how often this is called
|
||||||
private void OnDataAvailable(object sender, WaveInEventArgs e)
|
private void OnDataAvailable(object sender, WaveInEventArgs e)
|
||||||
{
|
{
|
||||||
if ((DateTime.Now - _lastAudioUpdate) < TimeSpan.FromMilliseconds(200))
|
if (DateTime.Now - _lastAudioUpdate < TimeSpan.FromMilliseconds(40))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_lastAudioUpdate = DateTime.Now;
|
_lastAudioUpdate = DateTime.Now;
|
||||||
|
|
||||||
var buffer = e.Buffer;
|
var buffer = e.Buffer;
|
||||||
|
|||||||
@ -1,12 +1,9 @@
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
using PixelFormat = System.Drawing.Imaging.PixelFormat;
|
|
||||||
using Point = System.Drawing.Point;
|
|
||||||
|
|
||||||
namespace Artemis.Utilities
|
namespace Artemis.Utilities
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user