1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-12 21:38:38 +00:00

Moving to Ninject dependency injection WIP 2

This commit is contained in:
Robert Beekman 2016-05-08 13:47:51 +02:00
parent b01ab9b135
commit f25dc00c16
35 changed files with 382 additions and 516 deletions

View File

@ -175,6 +175,14 @@
<HintPath>..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Ninject.Extensions.Logging, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.Extensions.Logging.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Ninject.Extensions.Logging.NLog4, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.Extensions.Logging.nlog4.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.NLog4.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.3.3\lib\net45\NLog.dll</HintPath>
<Private>True</Private>
@ -280,6 +288,7 @@
<Compile Include="KeyboardProviders\Razer\Utilities\RazerUtilities.cs" />
<Compile Include="Managers\EffectManager.cs" />
<Compile Include="Managers\KeyboardManager.cs" />
<Compile Include="Managers\LoopManager.cs" />
<Compile Include="Managers\MainManager.cs" />
<Compile Include="Models\EffectModel.cs" />
<Compile Include="Models\EffectSettings.cs" />

View File

@ -1,24 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Artemis.Events;
using Artemis.Models;
using Artemis.Modules.Effects.ProfilePreview;
using Artemis.Settings;
using Caliburn.Micro;
using Ninject;
using NLog;
using LogManager = NLog.LogManager;
namespace Artemis.Managers
{
/// <summary>
/// Manages the effects
/// </summary>
public class EffectManager
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IEventAggregator _events;
private EffectModel _activeEffect;
private bool _clearing;
public EffectManager(IEventAggregator events)
{
@ -30,11 +30,6 @@ namespace Artemis.Managers
Logger.Info("Intialized EffectManager");
}
[Inject]
public Lazy<MainManager> MainManager { get; set; }
public EffectModel PauseEffect { get; set; }
/// <summary>
/// Used by ViewModels to show a preview of the profile currently being edited
/// </summary>
@ -78,13 +73,9 @@ namespace Artemis.Managers
public EffectModel GetLastEffect()
{
Logger.Debug("Getting last effect: {0}", General.Default.LastEffect);
if (General.Default.LastEffect == null)
return null;
var effect = EffectModels.FirstOrDefault(e => e.Name == General.Default.LastEffect);
// Fall back to the first effect found, in case settings are messed up
return effect;
return General.Default.LastEffect == null
? null
: EffectModels.FirstOrDefault(e => e.Name == General.Default.LastEffect);
}
/// <summary>
@ -92,8 +83,10 @@ namespace Artemis.Managers
/// </summary>
/// <param name="effectModel"></param>
/// <param name="force">Changes the effect, even if it's already running (effectively restarting it)</param>
public void ChangeEffect(EffectModel effectModel, bool force = false)
public void ChangeEffect(EffectModel effectModel)
{
if (effectModel == null)
throw new ArgumentNullException(nameof(effectModel));
if (effectModel is OverlayModel)
throw new ArgumentException("Can't set an Overlay effect as the active effect");
@ -103,108 +96,48 @@ namespace Artemis.Managers
if (!gameModel.Enabled)
return;
if (ActiveEffect != null)
if (effectModel.Name == ActiveEffect.Name && !force)
var wasNull = false;
if (ActiveEffect == null)
{
wasNull = true;
ActiveEffect = effectModel;
}
lock (ActiveEffect)
{
if (!wasNull)
ActiveEffect.Dispose();
ActiveEffect = effectModel;
ActiveEffect.Enable();
if (ActiveEffect is GameModel || ActiveEffect is ProfilePreviewModel)
return;
Logger.Debug("Changing effect to: {0}, force: {1}", effectModel?.Name, force);
// If the main manager is running, pause it and safely change the effect
if (MainManager.Value.Running)
{
ChangeEffectWithPause(effectModel);
return;
// Non-game effects are stored as the new LastEffect.
General.Default.LastEffect = ActiveEffect?.Name;
General.Default.Save();
}
// If it's not running start it, and let the next recursion handle changing the effect
MainManager.Value.Start(effectModel);
Logger.Debug($"Changed active effect to: {effectModel.Name}");
}
private void ChangeEffectWithPause(EffectModel effectModel)
{
var tryCount = 0;
while (PauseEffect != null)
{
Thread.Sleep(500);
tryCount++;
if (tryCount > 20)
throw new Exception("Couldn't change effect before the time expired");
}
// Don't interrupt an ongoing effect change
if (PauseEffect != null)
{
Logger.Debug("Change effect with pause cancelled");
return;
}
Logger.Debug("Changing effect with pause: {0}", effectModel?.Name);
PauseEffect = effectModel;
MainManager.Value.Pause();
MainManager.Value.PauseCallback += ChangeEffectPauseCallback;
}
private void ChangeEffectPauseCallback()
{
MainManager.Value.PauseCallback -= ChangeEffectPauseCallback;
// Change effect logic
ActiveEffect?.Dispose();
ActiveEffect = PauseEffect;
ActiveEffect?.Enable();
MainManager.Value.Unpause();
PauseEffect = null;
Logger.Debug("Finishing change effect with pause");
if (ActiveEffect is GameModel || ActiveEffect is ProfilePreviewModel)
return;
// Non-game effects are stored as the new LastEffect.
General.Default.LastEffect = ActiveEffect?.Name;
General.Default.Save();
}
/// <summary>
/// Clears the current effect
/// </summary>
public void ClearEffect()
{
if (_clearing)
return;
// Don't mess with the ActiveEffect if in the process of changing the effect.
if (PauseEffect != null)
return;
if (ActiveEffect == null)
return;
_clearing = true;
Logger.Debug("Clearing active effect");
MainManager.Value.Pause();
MainManager.Value.PauseCallback += ClearEffectPauseCallback;
}
private void ClearEffectPauseCallback()
{
MainManager.Value.PauseCallback -= ClearEffectPauseCallback;
if (PauseEffect != null)
lock (ActiveEffect)
{
Logger.Debug("Cancelling clearing effect");
return;
ActiveEffect.Dispose();
ActiveEffect = null;
General.Default.LastEffect = null;
General.Default.Save();
}
ActiveEffect.Dispose();
ActiveEffect = null;
General.Default.LastEffect = null;
General.Default.Save();
_clearing = false;
Logger.Debug("Finishing clearing active effect");
MainManager.Value.Unpause();
Logger.Debug("Cleared active effect");
}
/// <summary>
@ -213,7 +146,7 @@ namespace Artemis.Managers
/// <param name="activeEffect"></param>
public void DisableGame(EffectModel activeEffect)
{
Logger.Debug("Disabling game: {0}", activeEffect?.Name);
Logger.Debug($"Disabling game: {activeEffect?.Name}");
if (GetLastEffect() == null)
ClearEffect();
else

View File

@ -5,12 +5,14 @@ using Artemis.Events;
using Artemis.KeyboardProviders;
using Artemis.Settings;
using Caliburn.Micro;
using Ninject;
using NLog;
using LogManager = NLog.LogManager;
namespace Artemis.Managers
{
/// <summary>
/// Manages the keyboard providers
/// </summary>
public class KeyboardManager
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
@ -27,9 +29,6 @@ namespace Artemis.Managers
Logger.Info("Intialized KeyboardManager");
}
[Inject]
public Lazy<MainManager> MainManager { get; set; }
public List<KeyboardProvider> KeyboardProviders { get; set; }
public KeyboardProvider ActiveKeyboard
@ -43,17 +42,13 @@ namespace Artemis.Managers
}
}
public bool CanDisable { get; set; }
/// <summary>
/// Enables the last keyboard according to the settings file
/// </summary>
public void EnableLastKeyboard()
{
Logger.Debug("Enabling last keyboard: {0}", General.Default.LastKeyboard);
if (General.Default.LastKeyboard == null)
return;
if (General.Default.LastKeyboard == "")
Logger.Debug($"Enabling last keyboard: {General.Default.LastKeyboard}");
if (string.IsNullOrEmpty(General.Default.LastKeyboard))
return;
var keyboard = KeyboardProviders.FirstOrDefault(k => k.Name == General.Default.LastKeyboard);
@ -66,32 +61,41 @@ namespace Artemis.Managers
/// <param name="keyboardProvider"></param>
public void EnableKeyboard(KeyboardProvider keyboardProvider)
{
Logger.Debug("Enabling keyboard: {0}", keyboardProvider?.Name);
ReleaseActiveKeyboard();
if (keyboardProvider == null)
throw new ArgumentNullException(nameof(keyboardProvider));
if (ActiveKeyboard?.Name == keyboardProvider.Name)
return;
if (ActiveKeyboard != null)
if (keyboardProvider.Name == ActiveKeyboard.Name)
return;
// Disable everything if there's no active keyboard found
if (!keyboardProvider.CanEnable())
var wasNull = false;
if (ActiveKeyboard == null)
{
MainManager.Value.DialogService.ShowErrorMessageBox(keyboardProvider.CantEnableText);
General.Default.LastKeyboard = null;
General.Default.Save();
return;
wasNull = true;
ActiveKeyboard = keyboardProvider;
}
CanDisable = false;
ActiveKeyboard = keyboardProvider;
keyboardProvider.Enable();
lock (ActiveKeyboard)
{
Logger.Debug($"Enabling keyboard: {keyboardProvider.Name}");
General.Default.LastKeyboard = ActiveKeyboard.Name;
General.Default.Save();
CanDisable = true;
if (!wasNull)
ReleaseActiveKeyboard();
// Disable everything if there's no active keyboard found
if (!keyboardProvider.CanEnable())
{
// TODO: MainManager.DialogService.ShowErrorMessageBox(keyboardProvider.CantEnableText);
General.Default.LastKeyboard = null;
General.Default.Save();
return;
}
ActiveKeyboard = keyboardProvider;
ActiveKeyboard.Enable();
General.Default.LastKeyboard = ActiveKeyboard.Name;
General.Default.Save();
}
}
/// <summary>
@ -99,29 +103,16 @@ namespace Artemis.Managers
/// </summary>
public void ReleaseActiveKeyboard()
{
if (ActiveKeyboard == null || !CanDisable)
return;
lock (ActiveKeyboard)
{
if (ActiveKeyboard == null)
return;
ActiveKeyboard.Disable();
ActiveKeyboard = null;
}
ActiveKeyboard.Disable();
Logger.Debug("Released keyboard: {0}", ActiveKeyboard?.Name);
ActiveKeyboard = null;
}
/// <summary>
/// Changes the active keyboard
/// </summary>
/// <param name="keyboardProvider"></param>
public void ChangeKeyboard(KeyboardProvider keyboardProvider)
{
Logger.Debug("Changing active keyboard");
if (keyboardProvider == ActiveKeyboard)
return;
General.Default.LastKeyboard = keyboardProvider?.Name;
General.Default.Save();
Logger.Debug("Restarting for keyboard change");
MainManager.Value.Restart();
Logger.Debug($"Released keyboard: {ActiveKeyboard?.Name}");
}
}
}

View File

@ -0,0 +1,118 @@
using System;
using System.Timers;
using Artemis.Events;
using Caliburn.Micro;
using Ninject.Extensions.Logging;
namespace Artemis.Managers
{
/// <summary>
/// Manages the main programn loop
/// </summary>
public class LoopManager : IDisposable
{
private readonly EffectManager _effectManager;
private readonly IEventAggregator _events;
private readonly KeyboardManager _keyboardManager;
private readonly Timer _loopTimer;
public LoopManager(ILogger logger, IEventAggregator events, EffectManager effectManager,
KeyboardManager keyboardManager)
{
Logger = logger;
_events = events;
_effectManager = effectManager;
_keyboardManager = keyboardManager;
_loopTimer = new Timer(40);
_loopTimer.Elapsed += Render;
_loopTimer.Start();
}
public ILogger Logger { get; }
/// <summary>
/// Gets whether the loop is running
/// </summary>
public bool Running { get; private set; }
public void Dispose()
{
_loopTimer.Stop();
_loopTimer.Dispose();
}
public void Start()
{
Logger.Debug("Starting LoopManager");
// Setup
Running = true;
}
public void Stop()
{
Logger.Debug("Stopping LoopManager");
Running = false;
// Shut down
}
private void Render(object sender, ElapsedEventArgs e)
{
if (!Running)
return;
// Lock both the active keyboard and active effect so they will not change while rendering.
lock (_keyboardManager.ActiveKeyboard)
{
lock (_effectManager.ActiveEffect)
{
// Stop if no active keyboard/efffect
if (_keyboardManager.ActiveKeyboard == null || _effectManager.ActiveEffect == null)
{
Logger.Debug("No active keyboard/effect, stopping. " +
$"Keyboard={_keyboardManager.ActiveKeyboard?.Name}, " +
$"effect={_effectManager.ActiveEffect?.Name}");
Stop();
return;
}
// Skip frame if effect is still initializing
if (_effectManager.ActiveEffect.Initialized == false)
return;
// Update the current effect
if (_effectManager.ActiveEffect.Initialized)
_effectManager.ActiveEffect.Update();
// Get ActiveEffect's bitmap
var bitmap = _effectManager.ActiveEffect.Initialized
? _effectManager.ActiveEffect.GenerateBitmap()
: null;
lock (_effectManager.EnabledOverlays)
{
// Draw enabled overlays on top
foreach (var overlayModel in _effectManager.EnabledOverlays)
{
overlayModel.Update();
bitmap = bitmap != null
? overlayModel.GenerateBitmap(bitmap)
: overlayModel.GenerateBitmap();
}
}
if (bitmap == null)
return;
// If it exists, send bitmap to the device
_keyboardManager.ActiveKeyboard.DrawBitmap(bitmap);
// debugging TODO: Disable when window isn't shown (in Debug VM, or get rid of it, w/e)
_events.PublishOnUIThread(new ChangeBitmap(bitmap));
}
}
}
}
}

View File

@ -12,42 +12,35 @@ using Artemis.Utilities.LogitechDll;
using Artemis.ViewModels;
using Caliburn.Micro;
using Ninject;
using NLog;
using LogManager = NLog.LogManager;
using Ninject.Extensions.Logging;
namespace Artemis.Managers
{
public class MainManager
/// <summary>
/// Contains all the other managers and non-loop related components
/// </summary>
public class MainManager : IDisposable
{
public delegate void PauseCallbackHandler();
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly EffectManager _effectManager;
private readonly IEventAggregator _events;
private readonly int _fps;
private readonly KeyboardManager _keyboardManager;
private bool _paused;
private bool _restarting;
public MainManager(IEventAggregator events, KeyboardManager keyboardManager, EffectManager effectManager)
public MainManager(IEventAggregator events, ILogger logger, LoopManager loopManager,
KeyboardManager keyboardManager, EffectManager effectManager)
{
Logger = logger;
LoopManager = loopManager;
KeyboardManager = keyboardManager;
EffectManager = effectManager;
Logger.Info("Intializing MainManager");
_events = events;
_keyboardManager = keyboardManager;
_effectManager = effectManager;
_fps = 25;
//DialogService = dialogService;
KeyboardHook = new KeyboardHook();
UpdateWorker = new BackgroundWorker {WorkerSupportsCancellation = true};
ProcessWorker = new BackgroundWorker {WorkerSupportsCancellation = true};
UpdateWorker.DoWork += UpdateWorker_DoWork;
UpdateWorker.RunWorkerCompleted += BackgroundWorkerExceptionCatcher;
ProcessWorker.DoWork += ProcessWorker_DoWork;
ProcessWorker.RunWorkerCompleted += BackgroundWorkerExceptionCatcher;
@ -71,101 +64,21 @@ namespace Artemis.Managers
[Inject]
public Lazy<ShellViewModel> ShellViewModel { get; set; }
public ILogger Logger { get; }
private LoopManager LoopManager { get; }
public KeyboardManager KeyboardManager { get; set; }
public EffectManager EffectManager { get; set; }
public PipeServer PipeServer { get; set; }
public BackgroundWorker UpdateWorker { get; set; }
public BackgroundWorker ProcessWorker { get; set; }
public MetroDialogService DialogService { get; set; }
public KeyboardHook KeyboardHook { get; set; }
public GameStateWebServer GameStateWebServer { get; set; }
public bool ProgramEnabled { get; private set; }
public bool Suspended { get; set; }
public bool Running { get; private set; }
public event PauseCallbackHandler PauseCallback;
/// <summary>
/// Take control of the keyboard and start sending data to it
/// </summary>
/// <returns>Whether starting was successful or not</returns>
public bool Start(EffectModel effect = null)
{
Logger.Debug("Starting MainManager");
// Can't take control when not enabled
if (!ProgramEnabled || UpdateWorker.CancellationPending || UpdateWorker.IsBusy || _paused)
return false;
// Do nothing if already running
if (Running)
return true;
// Only continue if a keyboard was loaded
_keyboardManager.EnableLastKeyboard();
if (_keyboardManager.ActiveKeyboard == null)
return false;
Running = true;
if (effect != null)
_effectManager.ChangeEffect(effect);
// Start the update worker
if (!UpdateWorker.IsBusy)
UpdateWorker.RunWorkerAsync();
return Running;
}
/// <summary>
/// Releases control of the keyboard and stop sending data to it
/// </summary>
public void Stop()
{
Logger.Debug("Stopping MainManager");
if (!Running || UpdateWorker.CancellationPending || _paused)
return;
// Stop the update worker
UpdateWorker.CancelAsync();
UpdateWorker.RunWorkerCompleted += FinishStop;
}
private void FinishStop(object sender, RunWorkerCompletedEventArgs e)
{
UpdateWorker.RunWorkerCompleted -= FinishStop;
_keyboardManager.ReleaseActiveKeyboard();
Running = false;
Logger.Debug("Stopped MainManager");
if (e.Error != null || !_restarting)
return;
Start();
_restarting = false;
}
public void Pause()
{
if (!Running || UpdateWorker.CancellationPending || _paused)
return;
Logger.Debug("Pausing MainManager");
_paused = true;
}
public void Unpause()
{
if (!_paused)
return;
Logger.Debug("Unpausing MainManager");
_paused = false;
}
public void Shutdown()
public void Dispose()
{
Logger.Debug("Shutting down MainManager");
Stop();
@ -175,20 +88,46 @@ namespace Artemis.Managers
PipeServer.Stop();
}
public void Restart()
/// <summary>
/// Take control of the keyboard and start sending data to it
/// </summary>
/// <returns>Whether starting was successful or not</returns>
public bool Start(EffectModel effect = null)
{
if (_restarting)
return;
Logger.Debug("Starting MainManager");
// Can't take control when not enabled
if (!ProgramEnabled)
return false;
Logger.Debug("Restarting MainManager");
// Do nothing if already running
if (Running)
return true;
// Only continue if a keyboard was loaded
KeyboardManager.EnableLastKeyboard();
if (KeyboardManager.ActiveKeyboard == null)
return false;
Running = true;
if (effect != null)
EffectManager.ChangeEffect(effect);
LoopManager.Start();
return Running;
}
/// <summary>
/// Releases control of the keyboard and stop sending data to it
/// </summary>
public void Stop()
{
if (!Running)
{
Start();
return;
}
_restarting = true;
Stop();
Logger.Debug("Stopping MainManager");
LoopManager.Stop();
}
/// <summary>
@ -198,7 +137,7 @@ namespace Artemis.Managers
{
Logger.Debug("Enabling program");
ProgramEnabled = true;
Start(_effectManager.GetLastEffect());
Start(EffectManager.GetLastEffect());
_events.PublishOnUIThread(new ToggleEnabled(ProgramEnabled));
}
@ -213,88 +152,6 @@ namespace Artemis.Managers
_events.PublishOnUIThread(new ToggleEnabled(ProgramEnabled));
}
#region Workers
private void UpdateWorker_DoWork(object sender, DoWorkEventArgs e)
{
var sw = new Stopwatch();
while (!UpdateWorker.CancellationPending)
{
// Skip frame when paused
if (_paused)
{
PauseCallback?.Invoke();
Thread.Sleep(1000/_fps);
continue;
}
// Stop if no keyboard/effect are present
if (_keyboardManager.ActiveKeyboard == null || _effectManager.ActiveEffect == null)
{
Thread.Sleep(1000/_fps);
Logger.Debug("No active effect/keyboard, stopping");
if (_effectManager.PauseEffect != null)
{
PauseCallback?.Invoke();
Thread.Sleep(1000/_fps);
}
else
Stop();
continue;
}
// Don't stop when the effect is still initialized, just skip this frame
if (!_effectManager.ActiveEffect.Initialized)
{
Thread.Sleep(1000/_fps);
continue;
}
sw.Start();
// Update the current effect
if (_effectManager.ActiveEffect.Initialized)
_effectManager.ActiveEffect.Update();
// Get ActiveEffect's bitmap
var bitmap = _effectManager.ActiveEffect.Initialized
? _effectManager.ActiveEffect.GenerateBitmap()
: null;
// Draw enabled overlays on top
foreach (var overlayModel in _effectManager.EnabledOverlays)
{
overlayModel.Update();
bitmap = bitmap != null ? overlayModel.GenerateBitmap(bitmap) : overlayModel.GenerateBitmap();
}
// If it exists, send bitmap to the device
if (bitmap != null && _keyboardManager.ActiveKeyboard != null)
{
_keyboardManager.ActiveKeyboard.DrawBitmap(bitmap);
// debugging TODO: Disable when window isn't shown
_events.PublishOnUIThread(new ChangeBitmap(bitmap));
}
// Sleep according to time left this frame
var sleep = (int) (1000/_fps - sw.ElapsedMilliseconds);
if (sleep > 0)
Thread.Sleep(sleep);
sw.Reset();
}
}
private void BackgroundWorkerExceptionCatcher(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
return;
Logger.Error(e.Error, "Exception in the BackgroundWorker");
throw e.Error;
}
private void ProcessWorker_DoWork(object sender, DoWorkEventArgs e)
{
while (!ProcessWorker.CancellationPending)
@ -308,28 +165,35 @@ namespace Artemis.Managers
var runningProcesses = Process.GetProcesses();
// If the currently active effect is a disabled game, get rid of it.
if (_effectManager.ActiveEffect != null)
_effectManager.DisableInactiveGame();
if (EffectManager.ActiveEffect != null)
EffectManager.DisableInactiveGame();
// If the currently active effect is a no longer running game, get rid of it.
var activeGame = _effectManager.ActiveEffect as GameModel;
var activeGame = EffectManager.ActiveEffect as GameModel;
if (activeGame != null)
if (!runningProcesses.Any(p => p.ProcessName == activeGame.ProcessName && p.HasExited == false))
_effectManager.DisableGame(activeGame);
EffectManager.DisableGame(activeGame);
// Look for running games, stopping on the first one that's found.
var newGame = _effectManager.EnabledGames
var newGame = EffectManager.EnabledGames
.FirstOrDefault(
g => runningProcesses.Any(p => p.ProcessName == g.ProcessName && p.HasExited == false));
// If it's not already enabled, do so.
if (newGame != null && _effectManager.ActiveEffect != newGame)
_effectManager.ChangeEffect(newGame);
if (newGame != null && EffectManager.ActiveEffect != newGame)
EffectManager.ChangeEffect(newGame);
Thread.Sleep(1000);
}
}
#endregion
private void BackgroundWorkerExceptionCatcher(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
return;
Logger.Error(e.Error, "Exception in the BackgroundWorker");
throw e.Error;
}
}
}

View File

@ -7,18 +7,13 @@ namespace Artemis.Models
public abstract class EffectModel : IDisposable
{
public delegate void SettingsUpdateHandler(EffectSettings settings);
public bool Initialized;
protected KeyboardManager KeyboardManager;
public MainManager MainManager;
public string Name;
protected EffectModel(MainManager mainManager, KeyboardManager keyboardManager)
protected EffectModel(MainManager mainManager)
{
MainManager = mainManager;
KeyboardManager = keyboardManager;
}
public abstract void Dispose();

View File

@ -6,8 +6,7 @@ namespace Artemis.Models
{
public abstract class GameModel : EffectModel
{
protected GameModel(MainManager mainManager, KeyboardManager keyboardManager, GameSettings settings)
: base(mainManager, keyboardManager)
protected GameModel(MainManager mainManager, GameSettings settings): base(mainManager)
{
Settings = settings;
}

View File

@ -8,8 +8,7 @@ namespace Artemis.Models
private bool _enabled;
public string ProcessName;
protected OverlayModel(MainManager mainManager, KeyboardManager keyboardManager)
: base(mainManager, keyboardManager)
protected OverlayModel(MainManager mainManager): base(mainManager)
{
}

View File

@ -20,8 +20,8 @@ namespace Artemis.Modules.Effects.AmbientLightning
private ScreenCapture _screenCapturer;
private KeyboardRectangle _topRect;
public AmbientLightningEffectModel(MainManager mainManager, KeyboardManager keyboardManager,
AmbientLightningEffectSettings settings) : base(mainManager, keyboardManager)
public AmbientLightningEffectModel(MainManager mainManager, AmbientLightningEffectSettings settings)
: base(mainManager)
{
Name = "Ambient Lightning";
Settings = settings;
@ -49,9 +49,9 @@ namespace Artemis.Modules.Effects.AmbientLightning
_colors = new List<Color>();
_screenCapturer = new ScreenCapture();
_topRect = new KeyboardRectangle(KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>(),
LinearGradientMode.Horizontal) {Height = KeyboardManager.ActiveKeyboard.Height*Scale/2};
_botRect = new KeyboardRectangle(KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>(),
_topRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>(),
LinearGradientMode.Horizontal) {Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale/2};
_botRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>(),
LinearGradientMode.Horizontal);
Initialized = true;
@ -102,8 +102,8 @@ namespace Artemis.Modules.Effects.AmbientLightning
}
// Put the resulting colors in 6 rectangles, their size differs per keyboard
var rectWidth = KeyboardManager.ActiveKeyboard.Width/3*Scale;
var rectHeight = KeyboardManager.ActiveKeyboard.Height/2*Scale;
var rectWidth = MainManager.KeyboardManager.ActiveKeyboard.Width/3*Scale;
var rectHeight = MainManager.KeyboardManager.ActiveKeyboard.Height/2*Scale;
for (var row = 0; row < 2; row++)
{
for (var column = 0; column < 3; column++)
@ -116,7 +116,7 @@ namespace Artemis.Modules.Effects.AmbientLightning
public override Bitmap GenerateBitmap()
{
var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap))
{
var i = 0;

View File

@ -7,16 +7,13 @@ namespace Artemis.Modules.Effects.AmbientLightning
{
public sealed class AmbientLightningEffectViewModel : EffectViewModel, IHandle<ActiveEffectChanged>
{
public AmbientLightningEffectViewModel(MainManager mainManager, KeyboardManager keyboardManager,
EffectManager effectManager, IEventAggregator events)
: base(
mainManager, effectManager,
new AmbientLightningEffectModel(mainManager, keyboardManager, new AmbientLightningEffectSettings()))
public AmbientLightningEffectViewModel(MainManager main, IEventAggregator events)
: base(main, new AmbientLightningEffectModel(main, new AmbientLightningEffectSettings()))
{
DisplayName = "Ambient Lightning";
events.Subscribe(this);
EffectManager.EffectModels.Add(EffectModel);
MainManager.EffectManager.EffectModels.Add(EffectModel);
}
public void Handle(ActiveEffectChanged message)

View File

@ -22,8 +22,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
private int _sensitivity;
private IWaveIn _waveIn;
public AudioVisualizerModel(MainManager mainManager, KeyboardManager keyboardManager,
AudioVisualizerSettings settings) : base(mainManager, keyboardManager)
public AudioVisualizerModel(MainManager mainManager, AudioVisualizerSettings settings) : base(mainManager)
{
Settings = settings;
Name = "Audiovisualizer";
@ -58,7 +57,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
public override void Enable()
{
Initialized = false;
Lines = KeyboardManager.ActiveKeyboard.Width;
Lines = MainManager.KeyboardManager.ActiveKeyboard.Width;
// TODO: Device selection
SelectedDeviceId = new MMDeviceEnumerator()
@ -70,7 +69,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
for (var i = 0; i < Lines; i++)
{
SoundRectangles.Add(new KeyboardRectangle(
KeyboardManager.ActiveKeyboard,
MainManager.KeyboardManager.ActiveKeyboard,
0, 0, new List<Color>
{
ColorHelpers.ToDrawingColor(Settings.TopColor),
@ -122,7 +121,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
// Apply Sensitivity setting
height = height*_sensitivity;
var keyboardHeight =
(int) Math.Round(KeyboardManager.ActiveKeyboard.Height/100.00*height*Scale);
(int) Math.Round(MainManager.KeyboardManager.ActiveKeyboard.Height/100.00*height*Scale);
if (keyboardHeight > SoundRectangles[i].Height)
SoundRectangles[i].Height = keyboardHeight;
else
@ -132,7 +131,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
SoundRectangles[i].Width = Scale;
if (_fromBottom)
SoundRectangles[i].Y = KeyboardManager.ActiveKeyboard.Height*Scale -
SoundRectangles[i].Y = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale -
SoundRectangles[i].Height;
}
_generating = false;
@ -146,7 +145,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
// Lock the _spectrumData array while busy with it
_generating = true;
var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap))
{
foreach (var soundRectangle in SoundRectangles)

View File

@ -7,16 +7,13 @@ namespace Artemis.Modules.Effects.AudioVisualizer
{
public sealed class AudioVisualizerViewModel : EffectViewModel, IHandle<ActiveEffectChanged>
{
public AudioVisualizerViewModel(MainManager mainManager, KeyboardManager keyboardManager,
EffectManager effectManager, IEventAggregator events)
: base(
mainManager, effectManager,
new AudioVisualizerModel(mainManager, keyboardManager, new AudioVisualizerSettings()))
public AudioVisualizerViewModel(MainManager main, IEventAggregator events)
: base(main, new AudioVisualizerModel(main, new AudioVisualizerSettings()))
{
DisplayName = "Audio Visualization";
events.Subscribe(this);
EffectManager.EffectModels.Add(EffectModel);
MainManager.EffectManager.EffectModels.Add(EffectModel);
}
public void Handle(ActiveEffectChanged message)

View File

@ -10,8 +10,7 @@ namespace Artemis.Modules.Effects.Debug
// TODO: Remove
internal class DebugEffectModel : EffectModel
{
public DebugEffectModel(MainManager mainManager, KeyboardManager keyboardManager, DebugEffectSettings settings)
: base(mainManager, keyboardManager)
public DebugEffectModel(MainManager mainManager, DebugEffectSettings settings) : base(mainManager)
{
Name = "Debug Effect";
Settings = settings;
@ -34,7 +33,7 @@ namespace Artemis.Modules.Effects.Debug
{
Initialized = false;
KeyboardRectangle = new KeyboardRectangle(KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>
KeyboardRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>
{
Color.Red,
Color.OrangeRed,

View File

@ -14,16 +14,13 @@ namespace Artemis.Modules.Effects.Debug
private ImageSource _imageSource;
private string _selectedRectangleType;
public DebugEffectViewModel(MainManager mainManager, KeyboardManager keyboardManager,
EffectManager effectManager, IEventAggregator events)
: base(
mainManager, effectManager,
new DebugEffectModel(mainManager, keyboardManager, new DebugEffectSettings()))
public DebugEffectViewModel(MainManager main, IEventAggregator events)
: base(main, new DebugEffectModel(main, new DebugEffectSettings()))
{
DisplayName = "Debug Effect";
events.Subscribe(this);
EffectManager.EffectModels.Add(EffectModel);
MainManager.EffectManager.EffectModels.Add(EffectModel);
}
public BindableCollection<string> RectangleTypes

View File

@ -10,8 +10,7 @@ namespace Artemis.Modules.Effects.ProfilePreview
{
private readonly ProfilePreviewDataModel _previewDataModel;
public ProfilePreviewModel(MainManager mainManager, KeyboardManager keyboardManager)
: base(mainManager, keyboardManager)
public ProfilePreviewModel(MainManager main) : base(main)
{
Name = "Profile Preview";
_previewDataModel = new ProfilePreviewDataModel();
@ -41,12 +40,12 @@ namespace Artemis.Modules.Effects.ProfilePreview
public override Bitmap GenerateBitmap()
{
var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(4);
var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(4);
if (SelectedProfile == null)
return bitmap;
var keyboardRect = KeyboardManager.ActiveKeyboard.KeyboardRectangle(4);
var keyboardRect = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRectangle(4);
var image = SelectedProfile.GenerateBitmap<ProfilePreviewDataModel>(keyboardRect, _previewDataModel, true);
// Draw on top of everything else

View File

@ -16,8 +16,7 @@ namespace Artemis.Modules.Effects.TypeWave
private readonly List<Wave> _waves;
private Color _randomColor;
public TypeWaveModel(MainManager mainManager, KeyboardManager keyboardManager, TypeWaveSettings settings)
: base(mainManager, keyboardManager)
public TypeWaveModel(MainManager mainManager, TypeWaveSettings settings) : base(mainManager)
{
Name = "TypeWave";
_waves = new List<Wave>();
@ -97,7 +96,7 @@ namespace Artemis.Modules.Effects.TypeWave
if (_waves.Count == 0)
return null;
var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap))
{
g.Clear(Color.Transparent);
@ -114,7 +113,7 @@ namespace Artemis.Modules.Effects.TypeWave
_waves[i].Size, _waves[i].Size);
Color fillColor;
if (KeyboardManager.ActiveKeyboard is CorsairRGB)
if (MainManager.KeyboardManager.ActiveKeyboard is CorsairRGB)
fillColor = Color.Black;
else
fillColor = Color.Transparent;

View File

@ -7,14 +7,13 @@ namespace Artemis.Modules.Effects.TypeWave
{
public sealed class TypeWaveViewModel : EffectViewModel, IHandle<ActiveEffectChanged>
{
public TypeWaveViewModel(MainManager mainManager, KeyboardManager keyboardManager, EffectManager effectManager,
IEventAggregator events)
: base(mainManager, effectManager, new TypeWaveModel(mainManager, keyboardManager, new TypeWaveSettings()))
public TypeWaveViewModel(MainManager main, IEventAggregator events)
: base(main, new TypeWaveModel(main, new TypeWaveSettings()))
{
DisplayName = "Type Waves";
events.Subscribe(this);
EffectManager.EffectModels.Add(EffectModel);
MainManager.EffectManager.EffectModels.Add(EffectModel);
}
public void Handle(ActiveEffectChanged message)

View File

@ -8,8 +8,7 @@ namespace Artemis.Modules.Games.CounterStrike
{
public class CounterStrikeModel : GameModel
{
public CounterStrikeModel(MainManager mainManager, CounterStrikeSettings settings,
KeyboardManager keyboardManager) : base(mainManager, keyboardManager, settings)
public CounterStrikeModel(MainManager mainManager, CounterStrikeSettings settings) : base(mainManager, settings)
{
Name = "CounterStrike";
ProcessName = "csgo";
@ -50,7 +49,7 @@ namespace Artemis.Modules.Games.CounterStrike
if (Profile == null || GameDataModel == null)
return null;
var keyboardRect = KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale);
var keyboardRect = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale);
return Profile.GenerateBitmap<CounterStrikeDataModel>(keyboardRect, GameDataModel);
}

View File

@ -8,16 +8,13 @@ namespace Artemis.Modules.Games.CounterStrike
{
public sealed class CounterStrikeViewModel : GameViewModel<CounterStrikeDataModel>
{
public CounterStrikeViewModel(MainManager mainManager, EffectManager effectManager,
KeyboardManager keyboardManager)
: base(
mainManager, effectManager,
new CounterStrikeModel(mainManager, new CounterStrikeSettings(), keyboardManager))
public CounterStrikeViewModel(MainManager main)
: base(main, new CounterStrikeModel(main, new CounterStrikeSettings()))
{
DisplayName = "CS:GO";
// Create effect model and add it to MainManager
EffectManager.EffectModels.Add(GameModel);
MainManager.EffectManager.EffectModels.Add(GameModel);
PlaceConfigFile();
}

View File

@ -15,15 +15,12 @@ namespace Artemis.Modules.Games.Dota2
{
internal class Dota2Model : GameModel
{
private readonly KeyboardManager _keyboardManager;
private KeyboardRegion _abilityKeys;
private KeyboardRegion _keyPad;
private KeyboardRegion _topRow;
public Dota2Model(MainManager mainManager, KeyboardManager keyboardManager, Dota2Settings settings)
: base(mainManager, keyboardManager, settings)
public Dota2Model(MainManager mainManager, Dota2Settings settings) : base(mainManager, settings)
{
_keyboardManager = keyboardManager;
Name = "Dota2";
ProcessName = "dota2";
Settings = settings;
@ -43,35 +40,35 @@ namespace Artemis.Modules.Games.Dota2
public override void Enable()
{
Initialized = false;
_topRow = _keyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "TopRow");
_keyPad = _keyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "NumPad");
_abilityKeys = _keyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "QWER");
HealthRectangle = new KeyboardRectangle(_keyboardManager.ActiveKeyboard
_topRow = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "TopRow");
_keyPad = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "NumPad");
_abilityKeys = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "QWER");
HealthRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard
, 0
, _topRow.BottomRight.Y*Scale
, new List<Color>()
, LinearGradientMode.Horizontal)
{Height = Scale, ContainedBrush = false};
ManaRectangle = new KeyboardRectangle(_keyboardManager.ActiveKeyboard
ManaRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard
, 0
, (_topRow.BottomRight.Y + 1)*Scale
, new List<Color>()
, LinearGradientMode.Horizontal)
{Height = Scale, ContainedBrush = false};
EventRectangle = new KeyboardRectangle(_keyboardManager.ActiveKeyboard
EventRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard
, 0
, _topRow.TopLeft.X + 3
, new List<Color>()
, LinearGradientMode.Horizontal)
{
Height = _keyboardManager.ActiveKeyboard.Height*Scale - Scale
Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale - Scale
,
Width = _keyboardManager.ActiveKeyboard.Width*Scale - Scale - 12
Width = MainManager.KeyboardManager.ActiveKeyboard.Width*Scale - Scale - 12
};
DayCycleRectangle = new KeyboardRectangle(_keyboardManager.ActiveKeyboard
DayCycleRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard
, _keyPad.TopLeft.X*Scale
, _keyPad.TopLeft.Y*Scale
, new List<Color>()
@ -99,7 +96,7 @@ namespace Artemis.Modules.Games.Dota2
case "3": //League of Legends
for (var i = 0; i < AbilityKeysRectangles.Length; i++)
{
AbilityKeysRectangles[i] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard,
AbilityKeysRectangles[i] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard,
(_abilityKeys.TopLeft.X + i)*Scale - 2,
_abilityKeys.TopLeft.Y*Scale,
new List<Color>(),
@ -111,7 +108,7 @@ namespace Artemis.Modules.Games.Dota2
}
break;
case "2":
AbilityKeysRectangles[0] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard,
AbilityKeysRectangles[0] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard,
_abilityKeys.TopLeft.X*Scale - 2,
_abilityKeys.TopLeft.Y*Scale,
new List<Color>(),
@ -120,7 +117,7 @@ namespace Artemis.Modules.Games.Dota2
Height = Scale,
Width = Scale
};
AbilityKeysRectangles[1] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard,
AbilityKeysRectangles[1] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard,
(_abilityKeys.TopLeft.X + 2)*Scale - 2,
_abilityKeys.TopLeft.Y*Scale,
new List<Color>(),
@ -129,7 +126,7 @@ namespace Artemis.Modules.Games.Dota2
Height = Scale,
Width = Scale
};
AbilityKeysRectangles[2] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard,
AbilityKeysRectangles[2] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard,
(_abilityKeys.TopLeft.X + 3)*Scale - 2,
_abilityKeys.TopLeft.Y*Scale,
new List<Color>(),
@ -138,7 +135,7 @@ namespace Artemis.Modules.Games.Dota2
Height = Scale,
Width = Scale
};
AbilityKeysRectangles[3] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard,
AbilityKeysRectangles[3] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard,
(_abilityKeys.TopLeft.X + 3)*Scale - 2,
(_abilityKeys.TopLeft.Y + 1)*Scale,
new List<Color>(),
@ -152,7 +149,7 @@ namespace Artemis.Modules.Games.Dota2
case "5": //Smite
for (var i = 0; i < AbilityKeysRectangles.Length; i++)
{
AbilityKeysRectangles[i] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard,
AbilityKeysRectangles[i] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard,
(_abilityKeys.TopLeft.X + i)*Scale - 3,
(_abilityKeys.TopLeft.Y - 1)*Scale,
new List<Color>(),
@ -297,7 +294,7 @@ namespace Artemis.Modules.Games.Dota2
public override Bitmap GenerateBitmap()
{
var bitmap = _keyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap))
{

View File

@ -9,12 +9,11 @@ namespace Artemis.Modules.Games.Dota2
{
public sealed class Dota2ViewModel : GameViewModel<Dota2DataModel>
{
public Dota2ViewModel(MainManager mainManager, EffectManager effectManager, KeyboardManager keyboardManager)
: base(mainManager, effectManager, new Dota2Model(mainManager, keyboardManager, new Dota2Settings()))
public Dota2ViewModel(MainManager main) : base(main, new Dota2Model(main, new Dota2Settings()))
{
DisplayName = "Dota 2";
EffectManager.EffectModels.Add(GameModel);
MainManager.EffectManager.EffectModels.Add(GameModel);
PlaceConfigFile();
}

View File

@ -15,8 +15,7 @@ namespace Artemis.Modules.Games.RocketLeague
private Memory _memory;
private GamePointersCollection _pointer;
public RocketLeagueModel(MainManager mainManager, KeyboardManager keyboardManager, RocketLeagueSettings settings)
: base(mainManager, keyboardManager, settings)
public RocketLeagueModel(MainManager mainManager, RocketLeagueSettings settings) : base(mainManager, settings)
{
Name = "RocketLeague";
ProcessName = "RocketLeague";
@ -73,7 +72,7 @@ namespace Artemis.Modules.Games.RocketLeague
if (Profile == null || GameDataModel == null)
return null;
var keyboardRect = KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale);
var keyboardRect = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale);
return Profile.GenerateBitmap<RocketLeagueDataModel>(keyboardRect, GameDataModel);
}
}

View File

@ -11,15 +11,12 @@ namespace Artemis.Modules.Games.RocketLeague
{
private string _versionText;
public RocketLeagueViewModel(MainManager mainManager, KeyboardManager keyboardManager,
EffectManager effectManager)
: base(
mainManager, effectManager,
new RocketLeagueModel(mainManager, keyboardManager, new RocketLeagueSettings()))
public RocketLeagueViewModel(MainManager main)
: base(main, new RocketLeagueModel(main, new RocketLeagueSettings()))
{
DisplayName = "Rocket League";
EffectManager.EffectModels.Add(GameModel);
MainManager.EffectManager.EffectModels.Add(GameModel);
SetVersionText();
}

View File

@ -12,7 +12,6 @@ namespace Artemis.Modules.Games.TheDivision
{
public class TheDivisionModel : GameModel
{
private readonly KeyboardManager _keyboardManager;
private Wave _ammoWave;
private TheDivisionDataModel _dataModel;
private KeyboardRectangle _hpRect;
@ -23,10 +22,8 @@ namespace Artemis.Modules.Games.TheDivision
private StickyValue<bool> _stickyHp;
private int _trans;
public TheDivisionModel(MainManager mainManager, KeyboardManager keyboardManager, TheDivisionSettings settings)
: base(mainManager, keyboardManager, settings)
public TheDivisionModel(MainManager mainManager, TheDivisionSettings settings) : base(mainManager, settings)
{
_keyboardManager = keyboardManager;
Name = "TheDivision";
ProcessName = "TheDivision";
Scale = 4;
@ -50,7 +47,7 @@ namespace Artemis.Modules.Games.TheDivision
Initialized = false;
_ammoWave = new Wave(new Point(30, 14), 0, Color.Transparent);
_hpRect = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, 3*Scale, 0*Scale,
_hpRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 3*Scale, 0*Scale,
new List<Color>(),
LinearGradientMode.Horizontal)
{
@ -60,7 +57,7 @@ namespace Artemis.Modules.Games.TheDivision
ContainedBrush = false
};
_p2 = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, 0*Scale, 1*Scale,
_p2 = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0*Scale, 1*Scale,
new List<Color>(),
LinearGradientMode.Horizontal)
{
@ -69,7 +66,7 @@ namespace Artemis.Modules.Games.TheDivision
Rotate = true,
ContainedBrush = false
};
_p3 = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, 0*Scale, 3*Scale,
_p3 = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0*Scale, 3*Scale,
new List<Color>(),
LinearGradientMode.Horizontal)
{
@ -78,7 +75,7 @@ namespace Artemis.Modules.Games.TheDivision
Rotate = true,
ContainedBrush = false
};
_p4 = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, 0*Scale, 5*Scale,
_p4 = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0*Scale, 5*Scale,
new List<Color>(),
LinearGradientMode.Horizontal)
{
@ -207,7 +204,7 @@ namespace Artemis.Modules.Games.TheDivision
public override Bitmap GenerateBitmap()
{
var bitmap = _keyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap))
{
g.Clear(Color.Transparent);

View File

@ -5,14 +5,11 @@ namespace Artemis.Modules.Games.TheDivision
{
public sealed class TheDivisionViewModel : GameViewModel<TheDivisionDataModel>
{
public TheDivisionViewModel(MainManager mainManager, EffectManager effectManager,
KeyboardManager keyboardManager)
: base(
mainManager, effectManager,
new TheDivisionModel(mainManager, keyboardManager, new TheDivisionSettings()))
public TheDivisionViewModel(MainManager main)
: base(main, new TheDivisionModel(main, new TheDivisionSettings()))
{
DisplayName = "The Division";
EffectManager.EffectModels.Add(GameModel);
MainManager.EffectManager.EffectModels.Add(GameModel);
}
}
}

View File

@ -18,8 +18,7 @@ namespace Artemis.Modules.Games.Witcher3
private KeyboardRectangle _signRect;
private string _witcherSettings;
public Witcher3Model(MainManager mainManager, KeyboardManager keyboardManager, Witcher3Settings settings)
: base(mainManager, keyboardManager, settings)
public Witcher3Model(MainManager mainManager, Witcher3Settings settings) : base(mainManager, settings)
{
Name = "Witcher3";
ProcessName = "witcher3";
@ -45,7 +44,7 @@ namespace Artemis.Modules.Games.Witcher3
{
Initialized = false;
_signRect = new KeyboardRectangle(KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>(),
_signRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>(),
LinearGradientMode.Horizontal)
{
Rotate = true,
@ -107,7 +106,7 @@ namespace Artemis.Modules.Games.Witcher3
public override Bitmap GenerateBitmap()
{
var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap))
{
g.Clear(Color.Transparent);

View File

@ -12,11 +12,10 @@ namespace Artemis.Modules.Games.Witcher3
{
public sealed class Witcher3ViewModel : GameViewModel<Witcher3DataModel>
{
public Witcher3ViewModel(MainManager mainManager, KeyboardManager keyboardManager, EffectManager effectManager)
: base(mainManager, effectManager, new Witcher3Model(mainManager, keyboardManager, new Witcher3Settings()))
public Witcher3ViewModel(MainManager main) : base(main, new Witcher3Model(main, new Witcher3Settings()))
{
DisplayName = "The Witcher 3";
EffectManager.EffectModels.Add(GameModel);
MainManager.EffectManager.EffectModels.Add(GameModel);
}
public static string Name => "The Witcher 3";

View File

@ -9,14 +9,13 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
{
public class VolumeDisplayModel : OverlayModel
{
public VolumeDisplayModel(MainManager mainManager, KeyboardManager keyboardManager,
VolumeDisplaySettings settings) : base(mainManager, keyboardManager)
public VolumeDisplayModel(MainManager mainManager, VolumeDisplaySettings settings) : base(mainManager)
{
Settings = settings;
Name = "VolumeDisplay";
Enabled = Settings.Enabled;
VolumeDisplay = new VolumeBar(keyboardManager, settings);
VolumeDisplay = new VolumeBar(MainManager.KeyboardManager, settings);
}
public VolumeBar VolumeDisplay { get; set; }
@ -64,7 +63,7 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
public override Bitmap GenerateBitmap()
{
return GenerateBitmap(KeyboardManager.ActiveKeyboard.KeyboardBitmap(4));
return GenerateBitmap(MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(4));
}
public override Bitmap GenerateBitmap(Bitmap bitmap)

View File

@ -5,9 +5,7 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
{
public sealed class VolumeDisplayViewModel : OverlayViewModel
{
public VolumeDisplayViewModel(MainManager mainManager, KeyboardManager keyboardManager,
EffectManager effectManager)
: base(mainManager, effectManager)
public VolumeDisplayViewModel(MainManager mainManager): base(mainManager)
{
DisplayName = "Volume Display";
@ -15,8 +13,8 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
OverlaySettings = new VolumeDisplaySettings();
// Create effect model and add it to MainManager
OverlayModel = new VolumeDisplayModel(mainManager, keyboardManager, (VolumeDisplaySettings) OverlaySettings);
EffectManager.EffectModels.Add(OverlayModel);
OverlayModel = new VolumeDisplayModel(mainManager, (VolumeDisplaySettings) OverlaySettings);
MainManager.EffectManager.EffectModels.Add(OverlayModel);
}
}
}

View File

@ -9,13 +9,11 @@ namespace Artemis.ViewModels.Abstract
protected readonly EffectModel EffectModel;
private EffectSettings _effectSettings;
private bool _showDisabledPopup;
protected EffectManager EffectManager;
protected MainManager MainManager;
protected EffectViewModel(MainManager mainManager, EffectManager effectManager, EffectModel effectModel)
protected EffectViewModel(MainManager mainManager, EffectModel effectModel)
{
MainManager = mainManager;
EffectManager = effectManager;
EffectModel = effectModel;
}
@ -30,7 +28,7 @@ namespace Artemis.ViewModels.Abstract
}
}
public bool EffectEnabled => EffectManager.ActiveEffect == EffectModel;
public bool EffectEnabled => MainManager.EffectManager.ActiveEffect == EffectModel;
public bool ShowDisabledPopup
{
@ -53,9 +51,9 @@ namespace Artemis.ViewModels.Abstract
}
if (EffectEnabled)
EffectManager.ClearEffect();
MainManager.EffectManager.ClearEffect();
else
EffectManager.ChangeEffect(EffectModel);
MainManager.EffectManager.ChangeEffect(EffectModel);
}
public void SaveSettings()
@ -65,7 +63,7 @@ namespace Artemis.ViewModels.Abstract
return;
// Restart the effect if it's currently running to apply settings.
EffectManager.ChangeEffect(EffectModel, true);
MainManager.EffectManager.ChangeEffect(EffectModel);
}
public async void ResetSettings()

View File

@ -15,12 +15,10 @@ namespace Artemis.ViewModels.Abstract
private bool _editorShown;
private GameSettings _gameSettings;
private EffectModel _lastEffect;
protected EffectManager EffectManager;
protected GameViewModel(MainManager mainManager, EffectManager effectManager, GameModel gameModel)
protected GameViewModel(MainManager mainManager, GameModel gameModel)
{
MainManager = mainManager;
EffectManager = effectManager;
GameModel = gameModel;
GameSettings = gameModel.Settings;
@ -45,7 +43,7 @@ namespace Artemis.ViewModels.Abstract
}
}
public bool GameEnabled => EffectManager.ActiveEffect == GameModel;
public bool GameEnabled => MainManager.EffectManager.ActiveEffect == GameModel;
public void ToggleEffect()
{
@ -59,7 +57,7 @@ namespace Artemis.ViewModels.Abstract
return;
// Restart the game if it's currently running to apply settings.
EffectManager.ChangeEffect(GameModel, true);
MainManager.EffectManager.ChangeEffect(GameModel);
}
public async void ResetSettings()
@ -109,11 +107,11 @@ namespace Artemis.ViewModels.Abstract
if (enable)
{
// Store the current effect so it can be restored later
if (!(EffectManager.ActiveEffect is ProfilePreviewModel))
_lastEffect = EffectManager.ActiveEffect;
if (!(MainManager.EffectManager.ActiveEffect is ProfilePreviewModel))
_lastEffect = MainManager.EffectManager.ActiveEffect;
EffectManager.ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile;
EffectManager.ChangeEffect(EffectManager.ProfilePreviewModel);
MainManager.EffectManager.ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile;
MainManager.EffectManager.ChangeEffect(MainManager.EffectManager.ProfilePreviewModel);
}
else
{
@ -123,12 +121,12 @@ namespace Artemis.ViewModels.Abstract
var gameModel = _lastEffect as GameModel;
if (gameModel != null)
if (!gameModel.Enabled)
EffectManager.GetLastEffect();
MainManager.EffectManager.GetLastEffect();
else
EffectManager.ChangeEffect(_lastEffect, true);
MainManager.EffectManager.ChangeEffect(_lastEffect);
}
else
EffectManager.ClearEffect();
MainManager.EffectManager.ClearEffect();
}
_editorShown = enable;
@ -140,7 +138,7 @@ namespace Artemis.ViewModels.Abstract
return;
GameModel.Profile = ProfileEditor.SelectedProfile;
EffectManager.ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile;
MainManager.EffectManager.ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile;
}
}

View File

@ -6,13 +6,11 @@ namespace Artemis.ViewModels.Abstract
{
public abstract class OverlayViewModel : Screen
{
protected readonly EffectManager EffectManager;
protected readonly MainManager MainManager;
private OverlaySettings _overlaySettings;
protected OverlayViewModel(MainManager mainManager, EffectManager effectManager)
protected OverlayViewModel(MainManager mainManager)
{
EffectManager = effectManager;
MainManager = mainManager;
}

View File

@ -60,7 +60,7 @@ namespace Artemis.ViewModels.Flyouts
if (value == null)
return;
_keyboardManager.ChangeKeyboard(
_keyboardManager.EnableKeyboard(
_keyboardManager.KeyboardProviders.FirstOrDefault(
k => k.Name == _selectedKeyboardProvider));
}

View File

@ -127,7 +127,7 @@ namespace Artemis.ViewModels
public void ExitApplication()
{
MainManager.Shutdown();
MainManager.Dispose();
Application.Current.Shutdown();
// Sometimes you need to be rough.

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Caliburn.Micro" version="3.0.1" targetFramework="net452" />
<package id="Caliburn.Micro.Core" version="3.0.1" targetFramework="net452" />
@ -14,6 +13,8 @@
<package id="NAudio" version="1.7.3" targetFramework="net452" />
<package id="Newtonsoft.Json" version="8.0.3" targetFramework="net452" />
<package id="Ninject" version="3.2.2.0" targetFramework="net452" />
<package id="Ninject.Extensions.Logging" version="3.2.3.0" targetFramework="net452" />
<package id="Ninject.Extensions.Logging.nlog4" version="3.2.3.0" targetFramework="net452" />
<package id="NLog" version="4.3.3" targetFramework="net452" />
<package id="NLog.Config" version="4.3.3" targetFramework="net452" />
<package id="NLog.Schema" version="4.3.0" targetFramework="net452" />