diff --git a/Artemis/Artemis/App.config b/Artemis/Artemis/App.config
index 261aa7ea0..46ae3e47e 100644
--- a/Artemis/Artemis/App.config
+++ b/Artemis/Artemis/App.config
@@ -66,6 +66,9 @@
#FFFF0000
+
+ False
+
diff --git a/Artemis/Artemis/App.xaml b/Artemis/Artemis/App.xaml
index d19aed2d9..93c331058 100644
--- a/Artemis/Artemis/App.xaml
+++ b/Artemis/Artemis/App.xaml
@@ -17,7 +17,7 @@
+ Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj
index 042691be2..ace3f72fb 100644
--- a/Artemis/Artemis/Artemis.csproj
+++ b/Artemis/Artemis/Artemis.csproj
@@ -274,7 +274,7 @@
True
-
+
True
True
diff --git a/Artemis/Artemis/Managers/EffectManager.cs b/Artemis/Artemis/Managers/EffectManager.cs
index 5d6eac557..f7187edfb 100644
--- a/Artemis/Artemis/Managers/EffectManager.cs
+++ b/Artemis/Artemis/Managers/EffectManager.cs
@@ -68,17 +68,19 @@ namespace Artemis.Managers
if (effectModel.Name == ActiveEffect.Name)
return;
- ActiveEffect?.Dispose();
-
- if (!_mainManager.Running)
+ // If the main manager is running, pause it and safely change the effect
+ if (_mainManager.Running)
{
- _mainManager.Start(effectModel);
+ ChangeEffectWithPause(effectModel);
return;
}
+ // If it's not running, change the effect and start it afterwards.
ActiveEffect = effectModel;
ActiveEffect.Enable();
+ _mainManager.Start(effectModel);
+
if (ActiveEffect is GameModel)
return;
@@ -90,6 +92,17 @@ namespace Artemis.Managers
_events.PublishOnUIThread(new ActiveEffectChanged(ActiveEffect.Name));
}
+ private void ChangeEffectWithPause(EffectModel effectModel)
+ {
+ _mainManager.Pause(effectModel);
+ _mainManager.PauseCallback += MainManagerOnPauseCallback;
+ }
+
+ private void MainManagerOnPauseCallback(EffectModel callbackEffect)
+ {
+
+ }
+
///
/// Clears the current effect
///
diff --git a/Artemis/Artemis/Models/EffectModel.cs b/Artemis/Artemis/Models/EffectModel.cs
index ee7d3d4f8..d41fc862d 100644
--- a/Artemis/Artemis/Models/EffectModel.cs
+++ b/Artemis/Artemis/Models/EffectModel.cs
@@ -10,6 +10,7 @@ namespace Artemis.Models
public MainManager MainManager;
public string Name;
+ public bool Initialized;
protected EffectModel(MainManager mainManager)
{
@@ -18,8 +19,6 @@ namespace Artemis.Models
public abstract void Dispose();
- public event SettingsUpdateHandler SettingsUpdateEvent;
-
// Called on creation
public abstract void Enable();
diff --git a/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerModel.cs b/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerModel.cs
index 015c01e15..5fbf08020 100644
--- a/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerModel.cs
+++ b/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerModel.cs
@@ -19,6 +19,8 @@ namespace Artemis.Modules.Effects.AudioVisualizer
private readonly SampleAggregator _sampleAggregator = new SampleAggregator(FftLength);
private bool _generating;
private IWaveIn _waveIn;
+ private int _sensitivity;
+ private bool _fromBottom;
public AudioVisualizerModel(MainManager mainManager, AudioVisualizerSettings settings) : base(mainManager)
{
@@ -27,6 +29,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
DeviceIds = new List();
SpectrumData = new List();
Scale = 4;
+ Initialized = false;
}
public int Lines { get; set; }
@@ -42,6 +45,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
public override void Dispose()
{
+ Initialized = false;
_sampleAggregator.PerformFFT = false;
_sampleAggregator.FftCalculated -= FftCalculated;
@@ -52,6 +56,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
public override void Enable()
{
+ Initialized = false;
Lines = MainManager.KeyboardManager.ActiveKeyboard.Width;
// TODO: Device selection
@@ -59,6 +64,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active)
.FirstOrDefault()?.ID;
+ // Apply settings
SoundRectangles = new List();
for (var i = 0; i < Lines; i++)
{
@@ -72,17 +78,21 @@ namespace Artemis.Modules.Effects.AudioVisualizer
},
LinearGradientMode.Vertical) {ContainedBrush = false, Height = 0});
}
-
+ _sensitivity = Settings.Sensitivity;
+ _fromBottom = Settings.FromBottom;
_sampleAggregator.FftCalculated += FftCalculated;
_sampleAggregator.PerformFFT = true;
+ // Start listening for sound data
_waveIn = new WasapiLoopbackCapture();
_waveIn.DataAvailable += OnDataAvailable;
_waveIn.StartRecording();
+
+ Initialized = true;
}
public override void Update()
- {
+ {
// Start filling the model
_generating = true;
@@ -108,7 +118,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
height = (int) Math.Round(SpectrumData[i]/2.55);
// Apply Sensitivity setting
- height = height*Settings.Sensitivity;
+ height = height* _sensitivity;
var keyboardHeight =
(int) Math.Round(MainManager.KeyboardManager.ActiveKeyboard.Height/100.00*height*Scale);
if (keyboardHeight > SoundRectangles[i].Height)
@@ -119,7 +129,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
SoundRectangles[i].X = i*Scale;
SoundRectangles[i].Width = Scale;
- if (Settings.FromBottom)
+ if (_fromBottom)
SoundRectangles[i].Y = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale -
SoundRectangles[i].Height;
}
diff --git a/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerView.xaml b/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerView.xaml
index e195fd19c..4d93659a6 100644
--- a/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerView.xaml
+++ b/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerView.xaml
@@ -81,12 +81,11 @@
- Grow bars bottom (broken, sorry!)
+ Grow bars bottom
+ OffLabel="No" Margin="0,0,-5,0" Width="114" />
{
Color.Red,
@@ -38,6 +42,8 @@ namespace Artemis.Modules.Effects.Debug
Color.Purple,
Color.DeepPink
}, LinearGradientMode.Horizontal);
+
+ Initialized = true;
}
public override void Update()
diff --git a/Artemis/Artemis/Modules/Effects/TypeHole/TypeHoleModel.cs b/Artemis/Artemis/Modules/Effects/TypeHole/TypeHoleModel.cs
index 216ea04e3..40167d92a 100644
--- a/Artemis/Artemis/Modules/Effects/TypeHole/TypeHoleModel.cs
+++ b/Artemis/Artemis/Modules/Effects/TypeHole/TypeHoleModel.cs
@@ -9,14 +9,23 @@ namespace Artemis.Modules.Effects.TypeHole
public TypeHoleModel(MainManager mainManager) : base(mainManager)
{
Name = "TypeHole";
+ Initialized = false;
}
public override void Dispose()
{
+ Initialized = false;
+
+ // Disable logic
}
public override void Enable()
{
+ Initialized = false;
+
+ // Enable logic
+
+ Initialized = true;
}
public override void Update()
diff --git a/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveModel.cs b/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveModel.cs
index 61610445e..a8472f5c4 100644
--- a/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveModel.cs
+++ b/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveModel.cs
@@ -23,19 +23,25 @@ namespace Artemis.Modules.Effects.TypeWave
_waves = new List();
_randomColor = Color.Red;
Settings = settings;
+ Initialized = false;
}
public TypeWaveSettings Settings { get; set; }
public override void Dispose()
{
+ Initialized = false;
MainManager.KeyboardHook.Unsubscribe(HandleKeypress);
}
public override void Enable()
{
+ Initialized = false;
+
// Listener won't start unless the effect is active
MainManager.KeyboardHook.Subscribe(HandleKeypress);
+
+ Initialized = true;
}
public override void Update()
diff --git a/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveView.xaml b/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveView.xaml
index 741ea49fe..04c1ffa9f 100644
--- a/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveView.xaml
+++ b/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveView.xaml
@@ -22,7 +22,6 @@
-
@@ -109,7 +108,7 @@
SmallChange="1" IsSnapToTickEnabled="True" />
-
+