diff --git a/.gitignore b/.gitignore index 5115c12d8..98ca98966 100644 --- a/.gitignore +++ b/.gitignore @@ -189,3 +189,4 @@ FakesAssemblies/ # Visual Studio 6 workspace options file *.opt +*.opendb diff --git a/Artemis/Artemis.sln b/Artemis/Artemis.sln index cf6e97100..201149a73 100644 --- a/Artemis/Artemis.sln +++ b/Artemis/Artemis.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis", "Artemis\Artemis.csproj", "{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LogiLed2Artemis", "LogiLed2Artemis\LogiLed2Artemis.vcxproj", "{D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CD_ROM|Any CPU = CD_ROM|Any CPU @@ -54,6 +56,34 @@ Global {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x64.Build.0 = Release|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x86.ActiveCfg = Release|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x86.Build.0 = Release|x86 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|Any CPU.ActiveCfg = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|Any CPU.Build.0 = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|x64.ActiveCfg = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|x64.Build.0 = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|x86.ActiveCfg = Release|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|x86.Build.0 = Release|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|x64.ActiveCfg = Debug|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|x64.Build.0 = Debug|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|x86.ActiveCfg = Debug|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|x86.Build.0 = Debug|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|Any CPU.ActiveCfg = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|Any CPU.Build.0 = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|x64.ActiveCfg = Debug|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|x64.Build.0 = Debug|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|x86.ActiveCfg = Debug|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|x86.Build.0 = Debug|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|Any CPU.ActiveCfg = Release|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|x64.ActiveCfg = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|x64.Build.0 = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|x86.ActiveCfg = Release|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|x86.Build.0 = Release|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|Any CPU.ActiveCfg = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|Any CPU.Build.0 = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|x64.ActiveCfg = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|x64.Build.0 = Release|x64 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|x86.ActiveCfg = Release|Win32 + {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index 1ea60910f..1f96f9a96 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -190,6 +190,10 @@ + + ..\packages\System.Linq.Dynamic.1.0.6\lib\net40\System.Linq.Dynamic.dll + True + @@ -249,6 +253,7 @@ Code + @@ -269,6 +274,12 @@ + + + + + + @@ -313,6 +324,7 @@ True True + True @@ -371,6 +383,7 @@ + @@ -397,8 +410,11 @@ + + + @@ -435,12 +451,21 @@ Witcher3View.xaml + + LayerEditorView.xaml + + + LayerConditionView.xaml + OverlaysView.xaml VolumeDisplayView.xaml + + ProfileEditorView.xaml + ShellView.xaml @@ -504,6 +529,7 @@ + @@ -532,6 +558,10 @@ MSBuild:Compile Designer + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -576,6 +606,14 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -584,6 +622,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/Artemis/Artemis/ArtemisBootstrapper.cs b/Artemis/Artemis/ArtemisBootstrapper.cs index e0f82e4b6..dc80755b4 100644 --- a/Artemis/Artemis/ArtemisBootstrapper.cs +++ b/Artemis/Artemis/ArtemisBootstrapper.cs @@ -2,8 +2,6 @@ using System.Linq; using System.Windows; using System.Windows.Forms; -using Artemis.Utilities; -using Artemis.Utilities.LogitechDll; using Artemis.ViewModels; using Autofac; using Caliburn.Micro; diff --git a/Artemis/Artemis/DAL/ProfileProvider.cs b/Artemis/Artemis/DAL/ProfileProvider.cs new file mode 100644 index 000000000..f696beeda --- /dev/null +++ b/Artemis/Artemis/DAL/ProfileProvider.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using Artemis.Models; +using Artemis.Models.Profiles; +using Newtonsoft.Json; + +namespace Artemis.DAL +{ + public static class ProfileProvider + { + private static readonly string ProfileFolder = + Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artemis\profiles"; + + /// + /// Get all profiles + /// + /// All profiles + public static List GetAll() + { + return ReadProfiles(); + } + + /// + /// Get all profiles matching the provided game + /// + /// The game to match + /// All profiles matching the provided game + public static List GetAll(GameModel game) + { + return GetAll().Where(g => g.GameName.Equals(game.Name)).ToList(); + } + + /// + /// Adds or update the given profile. + /// Updates occur when a profile with the same name and game exist. + /// + /// The profile to add or update + public static void AddOrUpdate(ProfileModel prof) + { + if (!(prof.GameName?.Length > 1) || !(prof.KeyboardName?.Length > 1) || !(prof.Name?.Length > 1)) + throw new ArgumentException("Profile is invalid. Name, GameName and KeyboardName are required"); + + var path = ProfileFolder + $@"\{prof.KeyboardName}\{prof.GameName}"; + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + + var serialized = JsonConvert.SerializeObject(prof, Formatting.Indented); + File.WriteAllText(path + $@"\{prof.Name}.json", serialized); + } + + private static List ReadProfiles() + { + CheckProfiles(); + var profiles = new List(); + + // Create the directory structure + var profileFiles = Directory.GetFiles(ProfileFolder, "*.json", SearchOption.AllDirectories); + + // Parse the JSON files into objects and add them if they are valid + foreach (var file in profileFiles) + { + var prof = JsonConvert.DeserializeObject(File.ReadAllText(file)); + if (prof.GameName?.Length > 1 && prof.KeyboardName?.Length > 1 && prof.Name?.Length > 1) + profiles.Add(prof); + } + + return profiles; + } + + private static void CheckProfiles() + { + // Create the directory structure + if (Directory.Exists(ProfileFolder)) + return; + + Directory.CreateDirectory(ProfileFolder); + Debug.WriteLine("Place presets"); + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs b/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs index b4fb74df9..adfd56704 100644 --- a/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs +++ b/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs @@ -11,12 +11,14 @@ namespace Artemis.KeyboardProviders.Logitech { internal class Orion : KeyboardProvider { + private string _versionString; + public Orion() { Name = "Logitech G910 RGB"; CantEnableText = "Couldn't connect to your Logitech G910.\n" + "Please check your cables and updating the Logitech Gaming Software\n" + - "A minimum version of 8.81.15 is required).\n\n" + + "A minimum version of 8.81.15 is required.\n\n" + "If needed, you can select a different keyboard in Artemis under settings."; Height = 6; Width = 21; @@ -40,6 +42,12 @@ namespace Artemis.KeyboardProviders.Logitech // Turn it into one long number... var version = int.Parse($"{majorNum}{minorNum}{buildNum}"); + CantEnableText = "Couldn't connect to your Logitech G910.\n" + + "Please check your cables and updating the Logitech Gaming Software\n" + + $"A minimum version of 8.81.15 is required (detected {majorNum}.{minorNum}.{buildNum}).\n\n" + + "If the detected version differs from the version LGS is reporting, reinstall LGS or see the FAQ.\n\n" + + "If needed, you can select a different keyboard in Artemis under settings."; + return version >= 88115; } diff --git a/Artemis/Artemis/KeyboardProviders/Razer/BlackWidow.cs b/Artemis/Artemis/KeyboardProviders/Razer/BlackWidow.cs index fb9881738..fc3f0d24e 100644 --- a/Artemis/Artemis/KeyboardProviders/Razer/BlackWidow.cs +++ b/Artemis/Artemis/KeyboardProviders/Razer/BlackWidow.cs @@ -13,8 +13,8 @@ namespace Artemis.KeyboardProviders.Razer public BlackWidow() { Name = "Razer BlackWidow Chroma"; - CantEnableText = "Couldn't connect to your Razer BlackWidow Chroma.\n " + - "Please check your cables and try updating Razer Synapse.\n\n " + + CantEnableText = "Couldn't connect to your Razer BlackWidow Chroma.\n" + + "Please check your cables and try updating Razer Synapse.\n\n" + "If needed, you can select a different keyboard in Artemis under settings."; } diff --git a/Artemis/Artemis/Managers/MainManager.cs b/Artemis/Artemis/Managers/MainManager.cs index f4f6a4859..0df082f1a 100644 --- a/Artemis/Artemis/Managers/MainManager.cs +++ b/Artemis/Artemis/Managers/MainManager.cs @@ -2,7 +2,6 @@ using System.Diagnostics; using System.Linq; using System.Threading; -using System.Windows.Forms; using Artemis.Events; using Artemis.Models; using Artemis.Services; diff --git a/Artemis/Artemis/Models/Interfaces/GameDataModel.cs b/Artemis/Artemis/Models/Interfaces/GameDataModel.cs new file mode 100644 index 000000000..3dd99c183 --- /dev/null +++ b/Artemis/Artemis/Models/Interfaces/GameDataModel.cs @@ -0,0 +1,6 @@ +namespace Artemis.Models.Interfaces +{ + public interface IGameDataModel + { + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Models/Profiles/LayerConditionModel.cs b/Artemis/Artemis/Models/Profiles/LayerConditionModel.cs new file mode 100644 index 000000000..8a48cdbaa --- /dev/null +++ b/Artemis/Artemis/Models/Profiles/LayerConditionModel.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq.Dynamic; +using Artemis.Models.Interfaces; + +namespace Artemis.Models.Profiles +{ + public class LayerConditionModel + { + public string Field { get; set; } + public string Value { get; set; } + public string Operator { get; set; } + + public bool ConditionMet(IGameDataModel subject) + { + // Put the subject in a list, allowing Dynamic Linq to be used. + var subjectList = new List {(T) subject}; + var res = subjectList.Where($"{Field} {Operator} {Value}").Any(); + return res; + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Models/Profiles/LayerDynamicPropertiesModel.cs b/Artemis/Artemis/Models/Profiles/LayerDynamicPropertiesModel.cs new file mode 100644 index 000000000..cb41291b0 --- /dev/null +++ b/Artemis/Artemis/Models/Profiles/LayerDynamicPropertiesModel.cs @@ -0,0 +1,86 @@ +using System.Collections.Generic; +using System.Drawing; +using System.Linq.Dynamic; +using System.Reflection; +using Artemis.Models.Interfaces; + +namespace Artemis.Models.Profiles +{ + public class LayerDynamicPropertiesModel + { + public string LayerProperty { get; set; } + public string GameProperty { get; set; } + public string RequiredOperator { get; set; } + public string RequiredValue { get; set; } + public LayerPopertyType LayerPopertyType { get; set; } + + /// + /// Only used when LayerPropertyType is PercentageOf or PercentageOfProperty + /// + public string PercentageSource { get; set; } + + /// + /// Only used when LayerPropertyType is Color + /// + public List LayerColors { get; set; } + + internal void ApplyProperty(IGameDataModel dataModel, LayerPropertiesModel userProps, + LayerPropertiesModel props) + { + var dataList = new List {(T) dataModel}; + + // Attempt to set the property + var layerProp = props.GetType().GetProperty(LayerProperty); + var layerUserProp = userProps.GetType().GetProperty(LayerProperty); + + if (LayerPopertyType == LayerPopertyType.PercentageOf) + SetPercentageOf(props, userProps, dataModel, int.Parse(PercentageSource)); + if (LayerPopertyType == LayerPopertyType.PercentageOfProperty) + SetPercentageOfProperty(props, userProps, dataModel); + if (LayerPopertyType == LayerPopertyType.Color) + { + if (dataList.Where($"{GameProperty} {RequiredOperator} {RequiredValue}").Any()) + SetColor(layerProp, dataModel); + } + } + + private void SetPercentageOf(LayerPropertiesModel props, LayerPropertiesModel userProps, + IGameDataModel dataModel, int percentageSource) + { + // Property that will be set + var layerProp = props.GetType().GetProperty(LayerProperty); + // Property to use as a 100% + var userProp = userProps.GetType().GetProperty(LayerProperty); + // Value to use as a source + var source = dataModel.GetType().GetProperty(GameProperty)?.GetValue(dataModel, null); + if (layerProp == null || userProp == null || source == null) + return; + + var percentage = double.Parse(source.ToString())/percentageSource; + layerProp.SetValue(props, (int) (percentage*(int) userProp.GetValue(userProps, null))); + } + + private void SetPercentageOfProperty(LayerPropertiesModel props, LayerPropertiesModel userProps, + IGameDataModel dataModel) + { + var value = dataModel.GetType().GetProperty(PercentageSource)?.GetValue(dataModel, null); + if (value != null) + SetPercentageOf(props, userProps, dataModel, (int) value); + } + + private void SetColor(PropertyInfo layerProp, IGameDataModel dataModel) + { + if (layerProp == null) + return; + if (layerProp.PropertyType == typeof (List)) + layerProp.SetValue(dataModel, LayerColors, null); + } + } + + public enum LayerPopertyType + { + PercentageOf, + PercentageOfProperty, + Color + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Models/Profiles/LayerModel.cs b/Artemis/Artemis/Models/Profiles/LayerModel.cs new file mode 100644 index 000000000..1f254544b --- /dev/null +++ b/Artemis/Artemis/Models/Profiles/LayerModel.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Windows.Media; +using Artemis.Models.Interfaces; +using Artemis.Utilities; +using Newtonsoft.Json; + +namespace Artemis.Models.Profiles +{ + public class LayerModel + { + [JsonIgnore] private readonly LayerDrawer _drawer; + + public LayerModel(string name, LayerType layerType) + { + Name = name; + LayerType = layerType; + LayerUserProperties = new LayerPropertiesModel(); + LayerCalculatedProperties = new LayerPropertiesModel(); + + Children = new List(); + LayerConditions = new List(); + LayerProperties = new List(); + + _drawer = new LayerDrawer(this); + } + + public string Name { get; set; } + public LayerType LayerType { get; set; } + public LayerPropertiesModel LayerUserProperties { get; set; } + + public List Children { get; set; } + public List LayerConditions { get; set; } + public List LayerProperties { get; set; } + + [JsonIgnore] + public LayerPropertiesModel LayerCalculatedProperties { get; } + + [JsonIgnore] + public ImageSource LayerImage => _drawer.GetPreviewImage(); + + public bool ConditionsMet(IGameDataModel dataModel) + { + return LayerConditions.All(cm => cm.ConditionMet(dataModel)); + } + + public void Draw(IGameDataModel dataModel, Graphics g) + { + if (!ConditionsMet(dataModel)) + return; + + Update(dataModel); + switch (LayerType) + { + case LayerType.Folder: + DrawChildren(dataModel, g); + break; + case LayerType.Rectangle: + _drawer.DrawRectangle(g); + break; + case LayerType.Ellipse: + _drawer.DrawEllipse(g); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void Update(IGameDataModel dataModel) + { + GeneralHelpers.CopyProperties(LayerCalculatedProperties, LayerUserProperties); + foreach (var dynamicProperty in LayerProperties) + dynamicProperty.ApplyProperty(dataModel, LayerUserProperties, LayerCalculatedProperties); + } + + private void DrawChildren(IGameDataModel dataModel, Graphics g) + { + foreach (var layerModel in Children) + layerModel.Draw(dataModel, g); + } + } + + public enum LayerType + { + Folder, + Rectangle, + Ellipse + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs b/Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs new file mode 100644 index 000000000..20e02df5f --- /dev/null +++ b/Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; + +namespace Artemis.Models.Profiles +{ + public class LayerPropertiesModel + { + public int X { get; set; } + public int Y { get; set; } + public int Width { get; set; } + public int Height { get; set; } + public int Opacity { get; set; } + public bool ContainedBrush { get; set; } + public LinearGradientMode GradientMode { get; set; } + public bool Rotate { get; set; } + public double RotateSpeed { get; set; } + public List Colors { get; set; } + + public LayerPropertiesModel() + { + Colors = new List(); + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Models/Profiles/ProfileModel.cs b/Artemis/Artemis/Models/Profiles/ProfileModel.cs new file mode 100644 index 000000000..86d4d409c --- /dev/null +++ b/Artemis/Artemis/Models/Profiles/ProfileModel.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; + +namespace Artemis.Models.Profiles +{ + public class ProfileModel + { + public ProfileModel(string name, string keyboardName, string gameName) + { + Name = name; + KeyboardName = keyboardName; + GameName = gameName; + } + + public string Name { get; set; } + public string KeyboardName { get; set; } + public string GameName { get; set; } + + public List Layers { get; set; } + + protected bool Equals(ProfileModel other) + { + return string.Equals(Name, other.Name) && string.Equals(KeyboardName, other.KeyboardName) && string.Equals(GameName, other.GameName); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != GetType()) return false; + return Equals((ProfileModel) obj); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = Name?.GetHashCode() ?? 0; + hashCode = (hashCode*397) ^ (KeyboardName?.GetHashCode() ?? 0); + hashCode = (hashCode*397) ^ (GameName?.GetHashCode() ?? 0); + return hashCode; + } + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueDataModel.cs b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueDataModel.cs new file mode 100644 index 000000000..d85980ab8 --- /dev/null +++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueDataModel.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Artemis.Models.Interfaces; +using Artemis.Utilities; + +namespace Artemis.Modules.Games.RocketLeague +{ + internal class RocketLeagueDataModel : IGameDataModel + { + public int Boost { get; set; } + public List Properties { get; } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs index f2a6390d5..2ffc9d0e8 100644 --- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs @@ -1,29 +1,31 @@ -using System.Collections.Generic; +using System; +using Artemis.Models.Interfaces; namespace Artemis.Modules.Games.TheDivision { - public class TheDivisionDataModel + public class TheDivisionDataModel : IGameDataModel { - public List DivisionPlayers { get; set; } - public GrenadeState GrenadeState { get; set; } - public bool LowAmmo { get; set; } - public bool LowHp { get; set; } - public TheDivisionDataModel() { - DivisionPlayers = new List(); + TestyTest = new TestTest(); } + + public PlayerState PartyMember1 { get; set; } + public PlayerState PartyMember2 { get; set; } + public PlayerState PartyMember3 { get; set; } + + public bool LowAmmo { get; set; } + public bool LowHp { get; set; } + public GrenadeState GrenadeState { get; set; } + + public TestTest TestyTest { get; set; } } - public class DivisionPlayer + + public class TestTest { - public int Id { get; set; } - public PlayerState PlayerState { get; set; } - - public DivisionPlayer(int id) - { - Id = id; - } + public string TestS { get; set; } + public int TestI { get; set; } } public enum GrenadeState diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs index 3c65d41c2..c231113d0 100644 --- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs @@ -1,14 +1,12 @@ using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; -using System.Linq; using Artemis.Managers; using Artemis.Models; using Artemis.Modules.Effects.TypeWave; using Artemis.Utilities; using Artemis.Utilities.Keyboard; using Artemis.Utilities.LogitechDll; -using CUE.NET; namespace Artemis.Modules.Games.TheDivision { @@ -95,8 +93,6 @@ namespace Artemis.Modules.Games.TheDivision DllManager.PlaceDll(); _dataModel = new TheDivisionDataModel(); - for (var i = 1; i < 5; i++) - _dataModel.DivisionPlayers.Add(new DivisionPlayer(i)); MainManager.PipeServer.PipeMessage += PipeServerOnPipeMessage; Initialized = true; @@ -118,7 +114,7 @@ namespace Artemis.Modules.Games.TheDivision } // Parses Division key data to game data - private void InterpertrateDivisionKey(int[] parts) + private void InterpertrateDivisionKey(IReadOnlyList parts) { var keyCode = parts[1]; var rPer = parts[2]; @@ -129,16 +125,21 @@ namespace Artemis.Modules.Games.TheDivision if (keyCode >= 59 && keyCode <= 62) { var playerId = keyCode - 58; - var playerDataModel = _dataModel.DivisionPlayers.FirstOrDefault(p => p.Id == playerId); - if (playerDataModel == null) - return; + PlayerState newState; if (gPer > 10) - playerDataModel.PlayerState = PlayerState.Online; + newState = PlayerState.Online; else if (rPer > 10) - playerDataModel.PlayerState = PlayerState.Hit; + newState = PlayerState.Hit; else - playerDataModel.PlayerState = PlayerState.Offline; + newState = PlayerState.Offline; + + if (playerId == 1) + _dataModel.PartyMember1 = newState; + else if (playerId == 2) + _dataModel.PartyMember2 = newState; + else if (playerId == 3) + _dataModel.PartyMember3 = newState; } // R blinks white when low on ammo else if (keyCode == 19) @@ -180,40 +181,28 @@ namespace Artemis.Modules.Games.TheDivision _hpRect.Colors = _dataModel.LowHp ? new List {Color.Red, Color.Orange} - : new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45) }; + : new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)}; - if (_dataModel.DivisionPlayers[1].PlayerState == PlayerState.Offline) + if (_dataModel.PartyMember1 == PlayerState.Offline) _p2.Colors = new List {Color.Gray, Color.White}; - else if (_dataModel.DivisionPlayers[1].PlayerState == PlayerState.Online) - _p2.Colors = new List { Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45) }; + else if (_dataModel.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.DivisionPlayers[2].PlayerState == PlayerState.Offline) + if (_dataModel.PartyMember2 == PlayerState.Offline) _p3.Colors = new List {Color.Gray, Color.White}; - else if (_dataModel.DivisionPlayers[2].PlayerState == PlayerState.Online) - _p3.Colors = new List { Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45) }; + else if (_dataModel.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.DivisionPlayers[3].PlayerState == PlayerState.Offline) + if (_dataModel.PartyMember3 == PlayerState.Offline) _p4.Colors = new List {Color.Gray, Color.White}; - else if (_dataModel.DivisionPlayers[3].PlayerState == PlayerState.Online) - _p4.Colors = new List { Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45) }; + else if (_dataModel.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}; - - if (!_dataModel.LowAmmo) - { - foreach (var corsairLed in CueSDK.MouseSDK.Leds) - corsairLed.Color = Color.Green; - } - else - { - foreach (var corsairLed in CueSDK.MouseSDK.Leds) - corsairLed.Color = Color.Red; - } - CueSDK.MouseSDK.Update(); } public override Bitmap GenerateBitmap() diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml index 5bd90ab14..48b9924bf 100644 --- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml @@ -7,48 +7,52 @@ xmlns:cal="http://www.caliburnproject.org" mc:Ignorable="d" d:DesignHeight="416.495" d:DesignWidth="553.608"> - - - - - - - - - - - - - - - - - - - - Note: For this game to work with Artemis, please open up your Division settings, navigate to 3rd Party and set LED keyboard support to Yes. (This only works if you have Artemis running before starting the game) - - - - - + + + + \ No newline at end of file diff --git a/Artemis/Artemis/Views/LayerEditor/LayerConditionView.xaml.cs b/Artemis/Artemis/Views/LayerEditor/LayerConditionView.xaml.cs new file mode 100644 index 000000000..1dd225b05 --- /dev/null +++ b/Artemis/Artemis/Views/LayerEditor/LayerConditionView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Artemis.Views.LayerEditor +{ + /// + /// Interaction logic for LayerConditionView.xaml + /// + public partial class LayerConditionView : UserControl + { + public LayerConditionView() + { + InitializeComponent(); + } + } +} diff --git a/Artemis/Artemis/Views/LayerEditorView.xaml b/Artemis/Artemis/Views/LayerEditorView.xaml new file mode 100644 index 000000000..087e0200d --- /dev/null +++ b/Artemis/Artemis/Views/LayerEditorView.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + +