mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-01-01 18:23:32 +00:00
Smoothed out profile preview activation
This commit is contained in:
parent
aafd361a6b
commit
0739885453
@ -298,6 +298,7 @@
|
|||||||
<Compile Include="Managers\KeyboardManager.cs" />
|
<Compile Include="Managers\KeyboardManager.cs" />
|
||||||
<Compile Include="Managers\LoopManager.cs" />
|
<Compile Include="Managers\LoopManager.cs" />
|
||||||
<Compile Include="Managers\MainManager.cs" />
|
<Compile Include="Managers\MainManager.cs" />
|
||||||
|
<Compile Include="Managers\ProfileManager.cs" />
|
||||||
<Compile Include="Models\EffectModel.cs" />
|
<Compile Include="Models\EffectModel.cs" />
|
||||||
<Compile Include="Models\EffectSettings.cs" />
|
<Compile Include="Models\EffectSettings.cs" />
|
||||||
<Compile Include="Models\GameSettings.cs" />
|
<Compile Include="Models\GameSettings.cs" />
|
||||||
|
|||||||
@ -10,6 +10,7 @@ namespace Artemis.InjectionModules
|
|||||||
Bind<MainManager>().ToSelf().InSingletonScope();
|
Bind<MainManager>().ToSelf().InSingletonScope();
|
||||||
Bind<KeyboardManager>().ToSelf().InSingletonScope();
|
Bind<KeyboardManager>().ToSelf().InSingletonScope();
|
||||||
Bind<EffectManager>().ToSelf().InSingletonScope();
|
Bind<EffectManager>().ToSelf().InSingletonScope();
|
||||||
|
Bind<ProfileManager>().ToSelf().InSingletonScope();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,7 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Timers;
|
|
||||||
using Artemis.Events;
|
using Artemis.Events;
|
||||||
using Artemis.Models;
|
using Artemis.Models;
|
||||||
using Artemis.Modules.Effects.ProfilePreview;
|
using Artemis.Modules.Effects.ProfilePreview;
|
||||||
@ -20,9 +19,8 @@ namespace Artemis.Managers
|
|||||||
private readonly KeyboardManager _keyboardManager;
|
private readonly KeyboardManager _keyboardManager;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private EffectModel _activeEffect;
|
private EffectModel _activeEffect;
|
||||||
private EffectModel _prePreviewEffect;
|
|
||||||
|
|
||||||
public EffectManager(IEventAggregator events, ILogger logger, KeyboardManager keyboardManager)
|
public EffectManager(ILogger logger, IEventAggregator events, KeyboardManager keyboardManager)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_logger.Info("Intializing EffectManager");
|
_logger.Info("Intializing EffectManager");
|
||||||
@ -32,10 +30,6 @@ namespace Artemis.Managers
|
|||||||
|
|
||||||
EffectModels = new List<EffectModel>();
|
EffectModels = new List<EffectModel>();
|
||||||
|
|
||||||
var profilePreviewTimer = new Timer(500);
|
|
||||||
profilePreviewTimer.Elapsed += SetupProfilePreview;
|
|
||||||
profilePreviewTimer.Start();
|
|
||||||
|
|
||||||
_logger.Info("Intialized EffectManager");
|
_logger.Info("Intialized EffectManager");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,46 +66,6 @@ namespace Artemis.Managers
|
|||||||
get { return EffectModels.OfType<GameModel>().Where(g => g.Enabled); }
|
get { return EffectModels.OfType<GameModel>().Where(g => g.Enabled); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Keeps track of profiles being previewed and sets up the active efffect accordingly
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void SetupProfilePreview(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
if (_keyboardManager.ChangingKeyboard)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Make sure the preview model should still be active
|
|
||||||
if (ActiveEffect is ProfilePreviewModel)
|
|
||||||
{
|
|
||||||
// Should not be active if no selected profile is set
|
|
||||||
if (ProfilePreviewModel.SelectedProfile != null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_prePreviewEffect != null)
|
|
||||||
{
|
|
||||||
_logger.Debug("Change back effect after profile preview");
|
|
||||||
ChangeEffect(_prePreviewEffect);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_logger.Debug("Clear effect after profile preview");
|
|
||||||
ClearEffect(); // TODO: This fails to lock
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Else make sure preview model indeed shouldn't be active
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (ProfilePreviewModel?.SelectedProfile == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_prePreviewEffect = ActiveEffect;
|
|
||||||
_logger.Debug("Activate profile preview");
|
|
||||||
ChangeEffect(ProfilePreviewModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads the last active effect from settings and enables it.
|
/// Loads the last active effect from settings and enables it.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -111,9 +111,10 @@ namespace Artemis.Managers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Releases the active keyboard, if CanDisable is true
|
/// Releases the active keyboard
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ReleaseActiveKeyboard()
|
/// <param name="save">Whether to save the LastKeyboard (making it null)</param>
|
||||||
|
public void ReleaseActiveKeyboard(bool save = false)
|
||||||
{
|
{
|
||||||
lock (this)
|
lock (this)
|
||||||
{
|
{
|
||||||
@ -127,8 +128,11 @@ namespace Artemis.Managers
|
|||||||
ActiveKeyboard.Disable();
|
ActiveKeyboard.Disable();
|
||||||
ActiveKeyboard = null;
|
ActiveKeyboard = null;
|
||||||
|
|
||||||
General.Default.LastKeyboard = null;
|
if (save)
|
||||||
General.Default.Save();
|
{
|
||||||
|
General.Default.LastKeyboard = null;
|
||||||
|
General.Default.Save();
|
||||||
|
}
|
||||||
|
|
||||||
_events.PublishOnUIThread(new ActiveKeyboardChanged(oldKeyboard, null));
|
_events.PublishOnUIThread(new ActiveKeyboardChanged(oldKeyboard, null));
|
||||||
_logger.Debug("Released keyboard: {0}", releaseName);
|
_logger.Debug("Released keyboard: {0}", releaseName);
|
||||||
|
|||||||
@ -27,12 +27,13 @@ namespace Artemis.Managers
|
|||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
public MainManager(IEventAggregator events, ILogger logger, LoopManager loopManager,
|
public MainManager(IEventAggregator events, ILogger logger, LoopManager loopManager,
|
||||||
KeyboardManager keyboardManager, EffectManager effectManager)
|
KeyboardManager keyboardManager, EffectManager effectManager, ProfileManager profileManager)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
LoopManager = loopManager;
|
LoopManager = loopManager;
|
||||||
KeyboardManager = keyboardManager;
|
KeyboardManager = keyboardManager;
|
||||||
EffectManager = effectManager;
|
EffectManager = effectManager;
|
||||||
|
ProfileManager = profileManager;
|
||||||
|
|
||||||
_logger.Info("Intializing MainManager");
|
_logger.Info("Intializing MainManager");
|
||||||
|
|
||||||
@ -68,13 +69,13 @@ namespace Artemis.Managers
|
|||||||
public LoopManager LoopManager { get; }
|
public LoopManager LoopManager { get; }
|
||||||
public KeyboardManager KeyboardManager { get; set; }
|
public KeyboardManager KeyboardManager { get; set; }
|
||||||
public EffectManager EffectManager { get; set; }
|
public EffectManager EffectManager { get; set; }
|
||||||
|
public ProfileManager ProfileManager { get; set; }
|
||||||
|
|
||||||
public PipeServer PipeServer { get; set; }
|
public PipeServer PipeServer { get; set; }
|
||||||
public BackgroundWorker ProcessWorker { get; set; }
|
public BackgroundWorker ProcessWorker { get; set; }
|
||||||
public KeyboardHook KeyboardHook { get; set; }
|
public KeyboardHook KeyboardHook { get; set; }
|
||||||
public GameStateWebServer GameStateWebServer { get; set; }
|
public GameStateWebServer GameStateWebServer { get; set; }
|
||||||
public bool ProgramEnabled { get; private set; }
|
public bool ProgramEnabled { get; private set; }
|
||||||
public bool Suspended { get; set; }
|
|
||||||
public bool Running { get; private set; }
|
public bool Running { get; private set; }
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|||||||
82
Artemis/Artemis/Managers/ProfileManager.cs
Normal file
82
Artemis/Artemis/Managers/ProfileManager.cs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Timers;
|
||||||
|
using Artemis.Models;
|
||||||
|
using Artemis.Modules.Effects.ProfilePreview;
|
||||||
|
using Artemis.ViewModels.Abstract;
|
||||||
|
using Ninject.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Artemis.Managers
|
||||||
|
{
|
||||||
|
public class ProfileManager
|
||||||
|
{
|
||||||
|
private readonly EffectManager _effectManager;
|
||||||
|
private readonly KeyboardManager _keyboardManager;
|
||||||
|
private readonly LoopManager _loopManager;
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
private EffectModel _prePreviewEffect;
|
||||||
|
|
||||||
|
public ProfileManager(ILogger logger, EffectManager effectManager, KeyboardManager keyboardManager, LoopManager loopManager)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_effectManager = effectManager;
|
||||||
|
_keyboardManager = keyboardManager;
|
||||||
|
_loopManager = loopManager;
|
||||||
|
|
||||||
|
GameViewModels = new List<GameViewModel>();
|
||||||
|
|
||||||
|
var profilePreviewTimer = new Timer(500);
|
||||||
|
profilePreviewTimer.Elapsed += SetupProfilePreview;
|
||||||
|
profilePreviewTimer.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProfilePreviewModel ProfilePreviewModel { get; set; }
|
||||||
|
|
||||||
|
public List<GameViewModel> GameViewModels { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Keeps track of profiles being previewed and sets up the active efffect accordingly
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void SetupProfilePreview(object sender, ElapsedEventArgs e)
|
||||||
|
{
|
||||||
|
if (_keyboardManager.ChangingKeyboard || ProfilePreviewModel == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var activePreview = GameViewModels.FirstOrDefault(vm => vm.IsActive);
|
||||||
|
if (activePreview == null)
|
||||||
|
{
|
||||||
|
// Should not be active if no selected profile is set
|
||||||
|
if (_effectManager.ActiveEffect != ProfilePreviewModel)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_prePreviewEffect != null)
|
||||||
|
{
|
||||||
|
_logger.Debug("Change back effect after profile preview");
|
||||||
|
_effectManager.ChangeEffect(_prePreviewEffect);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_logger.Debug("Clear effect after profile preview");
|
||||||
|
_effectManager.ClearEffect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_effectManager.ActiveEffect != ProfilePreviewModel)
|
||||||
|
{
|
||||||
|
_logger.Debug("Activate profile preview");
|
||||||
|
_prePreviewEffect = _effectManager.ActiveEffect;
|
||||||
|
_effectManager.ChangeEffect(ProfilePreviewModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoopManager might be running, this method won't do any harm in that case.
|
||||||
|
_loopManager.Start();
|
||||||
|
|
||||||
|
if (!ReferenceEquals(ProfilePreviewModel.SelectedProfile, activePreview.ProfileEditor.SelectedProfile))
|
||||||
|
ProfilePreviewModel.SelectedProfile = activePreview.ProfileEditor.SelectedProfile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -28,6 +28,7 @@ namespace Artemis.ViewModels.Abstract
|
|||||||
ProfileEditor = PFactory.CreateProfileEditorViewModel(Events, mainManager, gameModel);
|
ProfileEditor = PFactory.CreateProfileEditorViewModel(Events, mainManager, gameModel);
|
||||||
GameModel.Profile = ProfileEditor.SelectedProfile;
|
GameModel.Profile = ProfileEditor.SelectedProfile;
|
||||||
ProfileEditor.PropertyChanged += ProfileUpdater;
|
ProfileEditor.PropertyChanged += ProfileUpdater;
|
||||||
|
Events.Subscribe(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
@ -89,39 +90,7 @@ namespace Artemis.ViewModels.Abstract
|
|||||||
|
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnActivate()
|
|
||||||
{
|
|
||||||
base.OnActivate();
|
|
||||||
Task.Factory.StartNew(HandleActivationSwitch);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnDeactivate(bool close)
|
|
||||||
{
|
|
||||||
base.OnDeactivate(close);
|
|
||||||
Task.Factory.StartNew(HandleActivationSwitch);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void HandleActivationSwitch()
|
|
||||||
{
|
|
||||||
Thread.Sleep(600);
|
|
||||||
if (IsActive)
|
|
||||||
{
|
|
||||||
if (!MainManager.LoopManager.Running)
|
|
||||||
{
|
|
||||||
Logger.Debug("Starting LoopManager for profile preview");
|
|
||||||
MainManager.LoopManager.Start();
|
|
||||||
}
|
|
||||||
MainManager.EffectManager.ProfilePreviewModel = ProfilePreviewModel;
|
|
||||||
ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MainManager.EffectManager.ProfilePreviewModel = ProfilePreviewModel;
|
|
||||||
ProfilePreviewModel.SelectedProfile = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ProfileUpdater(object sender, PropertyChangedEventArgs e)
|
private void ProfileUpdater(object sender, PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.PropertyName != "SelectedProfile" && IsActive)
|
if (e.PropertyName != "SelectedProfile" && IsActive)
|
||||||
|
|||||||
@ -119,7 +119,7 @@ namespace Artemis.ViewModels.Flyouts
|
|||||||
MainManager.LoopManager.Start();
|
MainManager.LoopManager.Start();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
MainManager.KeyboardManager.ReleaseActiveKeyboard();
|
MainManager.KeyboardManager.ReleaseActiveKeyboard(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ToggleEnabled()
|
public void ToggleEnabled()
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
using Artemis.ViewModels.Abstract;
|
using Artemis.Managers;
|
||||||
|
using Artemis.Modules.Effects.ProfilePreview;
|
||||||
|
using Artemis.ViewModels.Abstract;
|
||||||
|
|
||||||
namespace Artemis.ViewModels
|
namespace Artemis.ViewModels
|
||||||
{
|
{
|
||||||
@ -6,10 +8,13 @@ namespace Artemis.ViewModels
|
|||||||
{
|
{
|
||||||
private readonly GameViewModel[] _gameViewModels;
|
private readonly GameViewModel[] _gameViewModels;
|
||||||
|
|
||||||
public GamesViewModel(GameViewModel[] gameViewModels)
|
public GamesViewModel(GameViewModel[] gameViewModels, ProfileManager profileManager, ProfilePreviewModel profilePreviewModel)
|
||||||
{
|
{
|
||||||
DisplayName = "Games";
|
DisplayName = "Games";
|
||||||
_gameViewModels = gameViewModels;
|
_gameViewModels = gameViewModels;
|
||||||
|
|
||||||
|
profileManager.ProfilePreviewModel = profilePreviewModel;
|
||||||
|
profileManager.GameViewModels.AddRange(_gameViewModels);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnActivate()
|
protected override void OnActivate()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user