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" /> - +