diff --git a/Artemis/Artemis/Artemis base layout.png b/Artemis/Artemis/Artemis base layout.png
new file mode 100644
index 000000000..62a7a4972
Binary files /dev/null and b/Artemis/Artemis/Artemis base layout.png differ
diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj
index a12a530c9..349c3cfcd 100644
--- a/Artemis/Artemis/Artemis.csproj
+++ b/Artemis/Artemis/Artemis.csproj
@@ -368,6 +368,8 @@
TheDivisionView.xaml
+
+
True
diff --git a/Artemis/Artemis/KeyboardProviders/Corsair/CorsairRGB.cs b/Artemis/Artemis/KeyboardProviders/Corsair/CorsairRGB.cs
index 5e0bf0fb8..0a95d6ff5 100644
--- a/Artemis/Artemis/KeyboardProviders/Corsair/CorsairRGB.cs
+++ b/Artemis/Artemis/KeyboardProviders/Corsair/CorsairRGB.cs
@@ -24,7 +24,6 @@ namespace Artemis.KeyboardProviders.Corsair
"Please check your cables and/or drivers (could be outdated) and that Corsair Utility Engine is running.\n" +
"In CUE, make sure \"Enable SDK\" is checked under Settings > Program.\n\n" +
"If needed, you can select a different keyboard in Artemis under settings.";
- KeyboardRegions = new List();
}
public override bool CanEnable()
@@ -74,40 +73,29 @@ namespace Artemis.KeyboardProviders.Corsair
/*CUE is already initialized*/
}
_keyboard = CueSDK.KeyboardSDK;
- switch (_keyboard.DeviceInfo.Model)
+ if (_keyboard.DeviceInfo.Model == "K95 RGB")
{
- case "K95 RGB":
- Height = 7;
- Width = 25;
- PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.k95);
- KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 1), new Point(20, 1)));
- KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(21, 2), new Point(25, 7)));
- KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(5, 3), new Point(8, 3)));
- break;
- case "K70 RGB":
- Height = 7;
- Width = 21;
- PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.k70);
- KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 1), new Point(18, 1)));
- KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(17, 2), new Point(21, 7)));
- KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(2, 3), new Point(5, 3)));
- break;
- case "K65 RGB":
- Height = 7;
- Width = 18;
- PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.k65);
- KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 1), new Point(18, 1)));
- KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(17, 2), new Point(20, 7)));
- KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(2, 3), new Point(5, 3)));
- break;
- case "STRAFE RGB":
- Height = 6;
- Width = 22;
- PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.strafe);
- KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 1), new Point(18, 1)));
- KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(18, 2), new Point(22, 7)));
- KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(1, 3), new Point(4, 3)));
- break;
+ Height = 7;
+ Width = 25;
+ PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.k95);
+ }
+ else if (_keyboard.DeviceInfo.Model == "K70 RGB")
+ {
+ Height = 7;
+ Width = 21;
+ PreviewSettings = new PreviewSettings(626, 195, new Thickness(0, -25, 0, 0), Resources.k70);
+ }
+ else if (_keyboard.DeviceInfo.Model == "K65 RGB")
+ {
+ Height = 7;
+ Width = 18;
+ PreviewSettings = new PreviewSettings(610, 240, new Thickness(0, -30, 0, 0), Resources.k65);
+ }
+ else if (_keyboard.DeviceInfo.Model == "STRAFE RGB")
+ {
+ Height = 6;
+ Width = 22;
+ PreviewSettings = new PreviewSettings(620, 215, new Thickness(0, -15, 0, 0), Resources.strafe);
}
}
diff --git a/Artemis/Artemis/KeyboardProviders/KeyboardProvider.cs b/Artemis/Artemis/KeyboardProviders/KeyboardProvider.cs
index 7917fa75c..71c0d028e 100644
--- a/Artemis/Artemis/KeyboardProviders/KeyboardProvider.cs
+++ b/Artemis/Artemis/KeyboardProviders/KeyboardProvider.cs
@@ -12,8 +12,6 @@ namespace Artemis.KeyboardProviders
public int Width { get; set; }
public string CantEnableText { get; set; }
- public List KeyboardRegions { get; set; }
-
public PreviewSettings PreviewSettings { get; set; }
public abstract bool CanEnable();
diff --git a/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs b/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs
index c46fd652d..e66c9d8e1 100644
--- a/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs
+++ b/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs
@@ -21,12 +21,6 @@ namespace Artemis.KeyboardProviders.Logitech
Height = 6;
Width = 21;
PreviewSettings = new PreviewSettings(540, 154, new Thickness(25, -80, 0, 0), Resources.g910);
- KeyboardRegions = new List
- {
- new KeyboardRegion("TopRow", new Point(0, 0), new Point(18, 0)),
- new KeyboardRegion("NumPad", new Point(17, 1), new Point(21, 6)),
- new KeyboardRegion("QWER", new Point(2, 2), new Point(5, 2))
- };
}
public override bool CanEnable()
diff --git a/Artemis/Artemis/KeyboardProviders/Razer/BlackWidow.cs b/Artemis/Artemis/KeyboardProviders/Razer/BlackWidow.cs
index 908f83fdb..52a930dfd 100644
--- a/Artemis/Artemis/KeyboardProviders/Razer/BlackWidow.cs
+++ b/Artemis/Artemis/KeyboardProviders/Razer/BlackWidow.cs
@@ -32,10 +32,6 @@ namespace Artemis.KeyboardProviders.Razer
Chroma.Instance.Initialize();
Height = Constants.MaxRows;
Width = Constants.MaxColumns;
-
- KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 0), new Point(19, 0)));
- KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(20, 1), new Point(23, 6)));
- KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(2, 2), new Point(5, 2)));
}
public override void Disable()
diff --git a/Artemis/Artemis/Managers/EffectManager.cs b/Artemis/Artemis/Managers/EffectManager.cs
index 88aa9c52e..d564cdf6c 100644
--- a/Artemis/Artemis/Managers/EffectManager.cs
+++ b/Artemis/Artemis/Managers/EffectManager.cs
@@ -94,13 +94,20 @@ namespace Artemis.Managers
_keyboardManager.EnableLastKeyboard();
// If still null, no last keyboard, so stop.
if (_keyboardManager.ActiveKeyboard == null)
+ {
+ _logger.Debug("Cancelling effect change, no LastKeyboard");
return;
+ }
// Game models are only used if they are enabled
var gameModel = effectModel as GameModel;
if (gameModel != null)
if (!gameModel.Enabled)
+ {
+ _logger.Debug("Cancelling effect change, provided game not enabled");
return;
+ }
+
var wasNull = false;
if (ActiveEffect == null)
@@ -116,13 +123,6 @@ namespace Artemis.Managers
ActiveEffect = effectModel;
ActiveEffect.Enable();
-
- 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();
}
if (loopManager != null && !loopManager.Running)
@@ -132,6 +132,13 @@ namespace Artemis.Managers
}
_logger.Debug("Changed active effect to: {0}", effectModel.Name);
+
+ 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();
}
diff --git a/Artemis/Artemis/Managers/LoopManager.cs b/Artemis/Artemis/Managers/LoopManager.cs
index 1e8d21312..a2ed94f53 100644
--- a/Artemis/Artemis/Managers/LoopManager.cs
+++ b/Artemis/Artemis/Managers/LoopManager.cs
@@ -135,14 +135,16 @@ namespace Artemis.Managers
if (bitmap == null)
return;
- // Fill the bitmap's background with blackness to avoid trailing colors on some keyboards
- using (var g = Graphics.FromImage(bitmap))
+ // Fill the bitmap's background with black to avoid trailing colors on some keyboards
+ var fixedBmp = new Bitmap(bitmap.Width, bitmap.Height);
+ using (var g = Graphics.FromImage(fixedBmp))
{
- var preFix = (Bitmap)bitmap.Clone();
g.Clear(Color.Black);
- g.DrawImage(preFix, 0, 0);
+ g.DrawImage(bitmap, 0, 0);
}
+ bitmap = fixedBmp;
+
// If it exists, send bitmap to the device
_keyboardManager.ActiveKeyboard?.DrawBitmap(bitmap);
diff --git a/Artemis/Artemis/Managers/MainManager.cs b/Artemis/Artemis/Managers/MainManager.cs
index 256c347bd..9afa9e00e 100644
--- a/Artemis/Artemis/Managers/MainManager.cs
+++ b/Artemis/Artemis/Managers/MainManager.cs
@@ -5,7 +5,7 @@ using System.Linq;
using System.Threading;
using Artemis.Events;
using Artemis.Models;
-using Artemis.Services;
+using Artemis.Modules.Effects.ProfilePreview;
using Artemis.Utilities.GameState;
using Artemis.Utilities.Keyboard;
using Artemis.Utilities.LogitechDll;
@@ -126,20 +126,31 @@ namespace Artemis.Managers
if (EffectManager.ActiveEffect != null)
EffectManager.DisableInactiveGame();
+ if (EffectManager.ActiveEffect is ProfilePreviewModel)
+ return;
+
// If the currently active effect is a no longer running game, get rid of it.
var activeGame = EffectManager.ActiveEffect as GameModel;
if (activeGame != null)
+ {
if (!runningProcesses.Any(p => p.ProcessName == activeGame.ProcessName && p.HasExited == false))
+ {
+ _logger.Info("Disabling game: {0}", activeGame.Name);
EffectManager.DisableGame(activeGame);
+ }
+ }
// Look for running games, stopping on the first one that's found.
var newGame = EffectManager.EnabledGames
- .FirstOrDefault(
- g => runningProcesses.Any(p => p.ProcessName == g.ProcessName && p.HasExited == false));
+ .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);
+ {
+ _logger.Info("Detected and enabling game: {0}", newGame.Name);
+ EffectManager.ChangeEffect(newGame, LoopManager);
+ }
Thread.Sleep(1000);
}
diff --git a/Artemis/Artemis/Models/GameModel.cs b/Artemis/Artemis/Models/GameModel.cs
index ab209277e..e0569a0a5 100644
--- a/Artemis/Artemis/Models/GameModel.cs
+++ b/Artemis/Artemis/Models/GameModel.cs
@@ -1,14 +1,16 @@
using Artemis.Managers;
using Artemis.Models.Interfaces;
using Artemis.Models.Profiles;
+using Artemis.Modules.Games.RocketLeague;
namespace Artemis.Models
{
public abstract class GameModel : EffectModel
{
- protected GameModel(MainManager mainManager, GameSettings settings) : base(mainManager)
+ protected GameModel(MainManager mainManager, GameSettings settings, IGameDataModel gameDataModel) : base(mainManager)
{
Settings = settings;
+ GameDataModel = gameDataModel;
}
public GameSettings Settings { get; set; }
diff --git a/Artemis/Artemis/Models/Profiles/LayerDynamicPropertiesModel.cs b/Artemis/Artemis/Models/Profiles/LayerDynamicPropertiesModel.cs
index c6bd07882..0ffd2bd86 100644
--- a/Artemis/Artemis/Models/Profiles/LayerDynamicPropertiesModel.cs
+++ b/Artemis/Artemis/Models/Profiles/LayerDynamicPropertiesModel.cs
@@ -60,7 +60,7 @@ namespace Artemis.Models.Profiles
layerProp.SetValue(props, opacity);
}
else
- layerProp.SetValue(props, (int) (percentage*(int) userProp.GetValue(userProps, null)));
+ layerProp.SetValue(props, percentage*(double) userProp.GetValue(userProps, null));
}
private void ApplyProp(LayerPropertiesModel props, LayerPropertiesModel userProps, IGameDataModel data)
diff --git a/Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs b/Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs
index 4427cb7e5..745997fa1 100644
--- a/Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs
+++ b/Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs
@@ -11,10 +11,10 @@ namespace Artemis.Models.Profiles
[XmlInclude(typeof(MatrixTransform))]
public class LayerPropertiesModel
{
- public int X { get; set; }
- public int Y { get; set; }
- public int Width { get; set; }
- public int Height { get; set; }
+ public double X { get; set; }
+ public double Y { get; set; }
+ public double Width { get; set; }
+ public double Height { get; set; }
public double Opacity { get; set; }
public bool ContainedBrush { get; set; }
public LayerAnimation Animation { get; set; }
diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs
index bae1671bc..128ffb205 100644
--- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs
+++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs
@@ -8,7 +8,7 @@ namespace Artemis.Modules.Games.CounterStrike
{
public class CounterStrikeModel : GameModel
{
- public CounterStrikeModel(MainManager mainManager, CounterStrikeSettings settings) : base(mainManager, settings)
+ public CounterStrikeModel(MainManager mainManager, CounterStrikeSettings settings) : base(mainManager, settings, new CounterStrikeDataModel())
{
Name = "CounterStrike";
ProcessName = "csgo";
@@ -29,7 +29,6 @@ namespace Artemis.Modules.Games.CounterStrike
{
Initialized = false;
- GameDataModel = new CounterStrikeDataModel();
MainManager.GameStateWebServer.GameDataReceived += HandleGameData;
Initialized = true;
diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml
index 4e521d966..ac9c61744 100644
--- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml
+++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml
@@ -3,8 +3,6 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
- xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:cal="http://www.caliburnproject.org"
mc:Ignorable="d"
d:DesignHeight="476.986" d:DesignWidth="538.772">
@@ -20,8 +18,8 @@
-
+
-
-
- Main keyboard color
-
-
+
+
-
-
- Ability Ready Color
-
-
-
-
-
- Ability on Cooldown Color
-
-
-
-
-
- Keyboard Template
-
-
-
-
-
- Castable Abilities
-
-
-
-
-
- Display health
-
-
-
-
-
- Display mana
-
-
-
-
-
- Mana color
-
-
-
-
-
- Display day/night
-
-
-
-
-
- Show events on the keyboard
-
-
-
-
-
+
+
-
-
\ No newline at end of file
diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs
index b7595c502..4e2d35cc9 100644
--- a/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs
+++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs
@@ -10,7 +10,7 @@ namespace Artemis.Modules.Games.Dota2
{
public sealed class Dota2ViewModel : GameViewModel
{
- public Dota2ViewModel(MainManager main, IEventAggregator events, IProfileEditorViewModelFactory pFactory)
+ public Dota2ViewModel(MainManager main, IEventAggregator events, IProfileEditorViewModelFactory pFactory)
: base(main, new Dota2Model(main, new Dota2Settings()), events, pFactory)
{
DisplayName = "Dota 2";
@@ -18,20 +18,7 @@ namespace Artemis.Modules.Games.Dota2
MainManager.EffectManager.EffectModels.Add(GameModel);
PlaceConfigFile();
}
-
- public BindableCollection KeyboardLayouts => new BindableCollection(new[]
- {
- "Default",
- "MMO",
- "WASD",
- "League of Legends",
- "Heros of Newearth",
- "Smite"
- });
-
- public static string Name => "Dota 2";
- public string Content => "Dota 2 Content";
-
+
public void BrowseDirectory()
{
var dialog = new FolderBrowserDialog {SelectedPath = ((Dota2Settings) GameSettings).GameDirectory};
@@ -70,8 +57,7 @@ namespace Artemis.Modules.Games.Dota2
"/game/dota/cfg/gamestate_integration/gamestate_integration_artemis.cfg",
cfgFile);
}
-
-
+
return;
}
diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs
index fdccbda9a..8eb5396f9 100644
--- a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs
+++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs
@@ -15,7 +15,8 @@ namespace Artemis.Modules.Games.RocketLeague
private Memory _memory;
private GamePointersCollection _pointer;
- public RocketLeagueModel(MainManager mainManager, RocketLeagueSettings settings) : base(mainManager, settings)
+ public RocketLeagueModel(MainManager mainManager, RocketLeagueSettings settings)
+ : base(mainManager, settings, new RocketLeagueDataModel())
{
Name = "RocketLeague";
ProcessName = "RocketLeague";
@@ -41,7 +42,6 @@ namespace Artemis.Modules.Games.RocketLeague
var tempProcess = MemoryHelpers.GetProcessIfRunning(ProcessName);
_memory = new Memory(tempProcess);
- GameDataModel = new RocketLeagueDataModel();
Initialized = true;
}
diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs
index 5b39771fd..fb6e44447 100644
--- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs
+++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs
@@ -13,7 +13,6 @@ namespace Artemis.Modules.Games.TheDivision
public class TheDivisionModel : GameModel
{
private Wave _ammoWave;
- private TheDivisionDataModel _dataModel;
private KeyboardRectangle _hpRect;
private KeyboardRectangle _p2;
private KeyboardRectangle _p3;
@@ -22,7 +21,7 @@ namespace Artemis.Modules.Games.TheDivision
private StickyValue _stickyHp;
private int _trans;
- public TheDivisionModel(MainManager mainManager, TheDivisionSettings settings) : base(mainManager, settings)
+ public TheDivisionModel(MainManager mainManager, TheDivisionSettings settings) : base(mainManager, settings, new TheDivisionDataModel())
{
Name = "TheDivision";
ProcessName = "TheDivision";
@@ -89,7 +88,6 @@ namespace Artemis.Modules.Games.TheDivision
_stickyHp = new StickyValue(200);
DllManager.PlaceDll();
- _dataModel = new TheDivisionDataModel();
MainManager.PipeServer.PipeMessage += PipeServerOnPipeMessage;
Initialized = true;
@@ -113,6 +111,7 @@ namespace Artemis.Modules.Games.TheDivision
// Parses Division key data to game data
private void InterpertrateDivisionKey(IReadOnlyList parts)
{
+ var gameDataModel = (TheDivisionDataModel)GameDataModel;
var keyCode = parts[1];
var rPer = parts[2];
var gPer = parts[3];
@@ -132,39 +131,40 @@ namespace Artemis.Modules.Games.TheDivision
newState = PlayerState.Offline;
if (playerId == 1)
- _dataModel.PartyMember1 = newState;
+ gameDataModel.PartyMember1 = newState;
else if (playerId == 2)
- _dataModel.PartyMember2 = newState;
+ gameDataModel.PartyMember2 = newState;
else if (playerId == 3)
- _dataModel.PartyMember3 = newState;
+ gameDataModel.PartyMember3 = newState;
}
// R blinks white when low on ammo
else if (keyCode == 19)
{
_stickyAmmo.Value = rPer == 100 && gPer > 1 && bPer > 1;
- _dataModel.LowAmmo = _stickyAmmo.Value;
+ gameDataModel.LowAmmo = _stickyAmmo.Value;
}
// G turns white when holding a grenade, turns off when out of grenades
else if (keyCode == 34)
{
if (rPer == 100 && gPer < 10 && bPer < 10)
- _dataModel.GrenadeState = GrenadeState.HasGrenade;
+ gameDataModel.GrenadeState = GrenadeState.HasGrenade;
else if (rPer == 100 && gPer > 10 && bPer > 10)
- _dataModel.GrenadeState = GrenadeState.GrenadeEquipped;
+ gameDataModel.GrenadeState = GrenadeState.GrenadeEquipped;
else
- _dataModel.GrenadeState = GrenadeState.HasNoGrenade;
+ gameDataModel.GrenadeState = GrenadeState.HasNoGrenade;
}
// V blinks on low HP
else if (keyCode == 47)
{
_stickyHp.Value = rPer == 100 && gPer > 1 && bPer > 1;
- _dataModel.LowHp = _stickyHp.Value;
+ gameDataModel.LowHp = _stickyHp.Value;
}
}
public override void Update()
{
- if (_dataModel.LowAmmo)
+ var gameDataModel = (TheDivisionDataModel)GameDataModel;
+ if (gameDataModel.LowAmmo)
{
_ammoWave.Size++;
if (_ammoWave.Size > 30)
@@ -176,27 +176,27 @@ namespace Artemis.Modules.Games.TheDivision
else
_ammoWave.Size = 0;
- _hpRect.Colors = _dataModel.LowHp
+ _hpRect.Colors = gameDataModel.LowHp
? new List {Color.Red, Color.Orange}
: new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)};
- if (_dataModel.PartyMember1 == PlayerState.Offline)
+ if (gameDataModel.PartyMember1 == PlayerState.Offline)
_p2.Colors = new List {Color.Gray, Color.White};
- else if (_dataModel.PartyMember1 == PlayerState.Online)
+ else if (gameDataModel.PartyMember1 == PlayerState.Online)
_p2.Colors = new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)};
else
_p2.Colors = new List {Color.Red, Color.Orange};
- if (_dataModel.PartyMember2 == PlayerState.Offline)
+ if (gameDataModel.PartyMember2 == PlayerState.Offline)
_p3.Colors = new List {Color.Gray, Color.White};
- else if (_dataModel.PartyMember2 == PlayerState.Online)
+ else if (gameDataModel.PartyMember2 == PlayerState.Online)
_p3.Colors = new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)};
else
_p3.Colors = new List {Color.Red, Color.Orange};
- if (_dataModel.PartyMember3 == PlayerState.Offline)
+ if (gameDataModel.PartyMember3 == PlayerState.Offline)
_p4.Colors = new List {Color.Gray, Color.White};
- else if (_dataModel.PartyMember3 == PlayerState.Online)
+ else if (gameDataModel.PartyMember3 == PlayerState.Online)
_p4.Colors = new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)};
else
_p4.Colors = new List {Color.Red, Color.Orange};
diff --git a/Artemis/Artemis/Modules/Games/Witcher3/TheWitcherDataModel.cs b/Artemis/Artemis/Modules/Games/Witcher3/TheWitcherDataModel.cs
new file mode 100644
index 000000000..be1ac21d0
--- /dev/null
+++ b/Artemis/Artemis/Modules/Games/Witcher3/TheWitcherDataModel.cs
@@ -0,0 +1,18 @@
+using Artemis.Models.Interfaces;
+
+namespace Artemis.Modules.Games.Witcher3
+{
+ public class TheWitcherDataModel : IGameDataModel
+ {
+ public WitcherSign WitcherSign { get; set; }
+ }
+
+ public enum WitcherSign
+ {
+ Aard,
+ Yrden,
+ Igni,
+ Quen,
+ Axii
+ }
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3DataModel.cs b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3DataModel.cs
new file mode 100644
index 000000000..5d326f753
--- /dev/null
+++ b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3DataModel.cs
@@ -0,0 +1,8 @@
+using Artemis.Models.Interfaces;
+
+namespace Artemis.Modules.Games.Witcher3
+{
+ public class Witcher3DataModel : IGameDataModel
+ {
+ }
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs
index 693429d74..ab96dc427 100644
--- a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs
+++ b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs
@@ -18,7 +18,8 @@ namespace Artemis.Modules.Games.Witcher3
private KeyboardRectangle _signRect;
private string _witcherSettings;
- public Witcher3Model(MainManager mainManager, Witcher3Settings settings) : base(mainManager, settings)
+ public Witcher3Model(MainManager mainManager, Witcher3Settings settings)
+ : base(mainManager, settings, new TheWitcherDataModel())
{
Name = "Witcher3";
ProcessName = "witcher3";
@@ -64,6 +65,7 @@ namespace Artemis.Modules.Games.Witcher3
public override void Update()
{
+ var gameDataModel = (TheWitcherDataModel) GameDataModel;
// Witcher effect is very static and reads from disk, don't want to update too often.
if (_updateSw.ElapsedMilliseconds < 500)
return;
@@ -72,10 +74,8 @@ namespace Artemis.Modules.Games.Witcher3
if (_witcherSettings == null)
return;
- var reader = new StreamReader(File.Open(_witcherSettings,
- FileMode.Open,
- FileAccess.Read,
- FileShare.ReadWrite));
+ var reader = new StreamReader(
+ File.Open(_witcherSettings, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
var configContent = reader.ReadToEnd();
reader.Close();
@@ -87,32 +87,30 @@ namespace Artemis.Modules.Games.Witcher3
switch (sign)
{
case "ST_Aard\r":
- _signRect.Colors = new List {Color.DeepSkyBlue, Color.Blue};
+ gameDataModel.WitcherSign = WitcherSign.Aard;
break;
case "ST_Yrden\r":
- _signRect.Colors = new List {Color.Purple, Color.DeepPink};
+ gameDataModel.WitcherSign = WitcherSign.Yrden;
break;
case "ST_Igni\r":
- _signRect.Colors = new List {Color.DarkOrange, Color.Red};
+ gameDataModel.WitcherSign = WitcherSign.Igni;
break;
case "ST_Quen\r":
- _signRect.Colors = new List {Color.DarkOrange, Color.FromArgb(232, 193, 0)};
+ gameDataModel.WitcherSign = WitcherSign.Quen;
break;
case "ST_Axii\r":
- _signRect.Colors = new List {Color.LawnGreen, Color.DarkGreen};
+ gameDataModel.WitcherSign = WitcherSign.Axii;
break;
}
}
public override Bitmap GenerateBitmap()
{
- var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
- using (var g = Graphics.FromImage(bitmap))
- {
- g.Clear(Color.Transparent);
- _signRect.Draw(g);
- }
- return bitmap;
+ if (Profile == null || GameDataModel == null)
+ return null;
+
+ var keyboardRect = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale);
+ return Profile.GenerateBitmap(keyboardRect, GameDataModel);
}
}
}
\ No newline at end of file
diff --git a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs
index 4e810b3df..d03d3ffa5 100644
--- a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs
+++ b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs
@@ -5,7 +5,6 @@ using System.Linq;
using System.Windows.Forms;
using Artemis.InjectionFactories;
using Artemis.Managers;
-using Artemis.Models.Interfaces;
using Artemis.Properties;
using Artemis.ViewModels.Abstract;
using Caliburn.Micro;
@@ -107,8 +106,4 @@ namespace Artemis.Modules.Games.Witcher3
DialogService.ShowMessageBox("Success", "The mod was successfully installed!");
}
}
-
- public class Witcher3DataModel : IGameDataModel
- {
- }
}
\ No newline at end of file
diff --git a/Artemis/Artemis/Utilities/Memory/Memory.cs b/Artemis/Artemis/Utilities/Memory/Memory.cs
index 9eade6091..63caeb2a8 100644
--- a/Artemis/Artemis/Utilities/Memory/Memory.cs
+++ b/Artemis/Artemis/Utilities/Memory/Memory.cs
@@ -46,13 +46,21 @@ namespace Artemis.Utilities.Memory
///
protected ProcessModule FindModule(string name)
{
- if (string.IsNullOrEmpty(name))
- throw new ArgumentNullException("name");
- foreach (ProcessModule module in Process.Modules)
+ try
{
- if (module.ModuleName.ToLower() == name.ToLower())
- return module;
+ if (string.IsNullOrEmpty(name))
+ throw new ArgumentNullException("name");
+ foreach (ProcessModule module in Process.Modules)
+ {
+ if (module.ModuleName.ToLower() == name.ToLower())
+ return module;
+ }
}
+ catch (Exception)
+ {
+ return null;
+ }
+
return null;
}
diff --git a/Artemis/Artemis/ViewModels/LayerEditor/LayerEditorViewModel.cs b/Artemis/Artemis/ViewModels/LayerEditor/LayerEditorViewModel.cs
index 8c20796a0..148e45ffd 100644
--- a/Artemis/Artemis/ViewModels/LayerEditor/LayerEditorViewModel.cs
+++ b/Artemis/Artemis/ViewModels/LayerEditor/LayerEditorViewModel.cs
@@ -6,6 +6,8 @@ using System.Threading;
using System.Windows.Forms;
using System.Windows.Media;
using Artemis.KeyboardProviders;
+using Artemis.Models;
+using Artemis.Models.Interfaces;
using Artemis.Models.Profiles;
using Artemis.Services;
using Artemis.Utilities;
@@ -15,7 +17,7 @@ using Screen = Caliburn.Micro.Screen;
namespace Artemis.ViewModels.LayerEditor
{
- public class LayerEditorViewModel : Screen
+ public sealed class LayerEditorViewModel : Screen
{
private readonly KeyboardProvider _activeKeyboard;
private readonly BackgroundWorker _previewWorker;
@@ -25,7 +27,7 @@ namespace Artemis.ViewModels.LayerEditor
private LayerModel _proposedLayer;
private LayerPropertiesModel _proposedProperties;
- public LayerEditorViewModel(KeyboardProvider activeKeyboard, LayerModel layer)
+ public LayerEditorViewModel(IGameDataModel gameDataModel, KeyboardProvider activeKeyboard, LayerModel layer)
{
_activeKeyboard = activeKeyboard;
_wasEnabled = layer.Enabled;
@@ -36,7 +38,7 @@ namespace Artemis.ViewModels.LayerEditor
Layer.Enabled = false;
DataModelProps = new BindableCollection();
ProposedProperties = new LayerPropertiesModel();
- //DataModelProps.AddRange(GeneralHelpers.GenerateTypeMap());
+ DataModelProps.AddRange(GeneralHelpers.GenerateTypeMap(gameDataModel));
LayerConditionVms =
new BindableCollection(
layer.LayerConditions.Select(c => new LayerConditionViewModel(this, c, DataModelProps)));
diff --git a/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs b/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs
index 01e510ce8..3a3466deb 100644
--- a/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs
+++ b/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs
@@ -265,7 +265,7 @@ namespace Artemis.ViewModels
public void LayerEditor(LayerModel layer)
{
IWindowManager manager = new WindowManager();
- _editorVm = new LayerEditorViewModel(ActiveKeyboard, layer);
+ _editorVm = new LayerEditorViewModel(_gameModel.GameDataModel, ActiveKeyboard, layer);
dynamic settings = new ExpandoObject();
settings.Title = "Artemis | Edit " + layer.Name;
diff --git a/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs b/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
index 3c6b1c7c7..33636f163 100644
--- a/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
+++ b/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
@@ -133,9 +133,6 @@ namespace Artemis.ViewModels
{
MainManager.Dispose();
Application.Current.Shutdown();
-
- // Sometimes you need to be rough.
- Environment.Exit(0);
}
}
}
\ No newline at end of file