From c61908f36bd7f6bc934a1873763e327c7a0b7a63 Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Thu, 10 Mar 2016 11:17:16 +0100 Subject: [PATCH] Added The Division skeleton code, Dota2 Logitech fixes --- Artemis/Artemis/App.config | 6 ++ Artemis/Artemis/Artemis.csproj | 19 ++++ .../KeyboardProviders/KeyboardRegion.cs | 2 + .../KeyboardProviders/Logitech/Orion.cs | 4 +- .../Artemis/Modules/Games/Dota2/Dota2Model.cs | 99 +++++++++---------- .../Games/TheDivision/TheDivision.Designer.cs | 38 +++++++ .../Games/TheDivision/TheDivision.settings | 9 ++ .../Games/TheDivision/TheDivisionModel.cs | 51 ++++++++++ .../Games/TheDivision/TheDivisionSettings.cs | 29 ++++++ .../Games/TheDivision/TheDivisionView.xaml | 54 ++++++++++ .../Games/TheDivision/TheDivisionView.xaml.cs | 28 ++++++ .../Games/TheDivision/TheDivisionViewModel.cs | 22 +++++ .../Utilities/Keyboard/KeyboardRectangle.cs | 4 +- Artemis/Artemis/ViewModels/GamesViewModel.cs | 4 + 14 files changed, 312 insertions(+), 57 deletions(-) create mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivision.Designer.cs create mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivision.settings create mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs create mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionSettings.cs create mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml create mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml.cs create mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs diff --git a/Artemis/Artemis/App.config b/Artemis/Artemis/App.config index 1f453afa7..0bda778e9 100644 --- a/Artemis/Artemis/App.config +++ b/Artemis/Artemis/App.config @@ -3,6 +3,7 @@ +
@@ -23,6 +24,11 @@ + + + True + + True diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index 099e59535..9a20f58be 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -314,6 +314,17 @@ True + + True + True + TheDivision.settings + + + + + TheDivisionView.xaml + + True @@ -466,6 +477,10 @@ SettingsSingleFileGenerator RocketLeague.Designer.cs + + SettingsSingleFileGenerator + TheDivision.Designer.cs + SettingsSingleFileGenerator Witcher3.Designer.cs @@ -506,6 +521,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + MSBuild:Compile Designer diff --git a/Artemis/Artemis/KeyboardProviders/KeyboardRegion.cs b/Artemis/Artemis/KeyboardProviders/KeyboardRegion.cs index 945ee7ae2..d4f3ed015 100644 --- a/Artemis/Artemis/KeyboardProviders/KeyboardRegion.cs +++ b/Artemis/Artemis/KeyboardProviders/KeyboardRegion.cs @@ -14,5 +14,7 @@ namespace Artemis.KeyboardProviders public string RegionName { get; set; } public Point TopLeft { get; set; } public Point BottomRight { get; set; } + + public Rectangle GetRectangle() => new Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X - TopLeft.X, BottomRight.Y - TopLeft.Y); } } \ No newline at end of file diff --git a/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs b/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs index e41080672..ca2a66969 100644 --- a/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs +++ b/Artemis/Artemis/KeyboardProviders/Logitech/Orion.cs @@ -18,8 +18,8 @@ namespace Artemis.KeyboardProviders.Logitech Width = 21; KeyboardRegions = new List { - new KeyboardRegion("TopRow", new Point(0, 0), new Point(0, 16)), - new KeyboardRegion("NumPad", new Point(0, 17), new Point(0, 25)) + new KeyboardRegion("TopRow", new Point(0, 0), new Point(16, 0)), + new KeyboardRegion("NumPad", new Point(17, 1), new Point(21, 6)) }; } diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs index bcb6f21e9..ac878564c 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs @@ -2,27 +2,23 @@ using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; -using System.Globalization; using System.Linq; -using System.Text; -using System.Threading.Tasks; using Artemis.KeyboardProviders; using Artemis.Managers; using Artemis.Models; +using Artemis.Utilities; using Artemis.Utilities.GameState; using Artemis.Utilities.Keyboard; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Artemis.Modules.Games.Dota2; -using Artemis.Utilities; namespace Artemis.Modules.Games.Dota2 { - class Dota2Model : GameModel + internal class Dota2Model : GameModel { + private KeyboardRegion _keyPad; private KeyboardRegion _topRow; - private KeyboardRegion _keyPad; + public Dota2Model(MainManager mainManager, Dota2Settings settings) : base(mainManager) { Settings = settings; @@ -33,17 +29,6 @@ namespace Artemis.Modules.Games.Dota2 Scale = 4; } - #region Variables - - public Dota2Settings Settings { get; set; } - public Dota2DataModel.Rootobject D2Json { get; set; } - public int Scale { get; set; } - public KeyboardRectangle HealthRectangle { get; set; } - public KeyboardRectangle EventRectangle { get; set; } - public KeyboardRectangle DayCycleRectangle { get; set; } - public KeyboardRectangle ManaRectangle { get; set; } - #endregion - public override void Dispose() { @@ -58,34 +43,37 @@ namespace Artemis.Modules.Games.Dota2 _keyPad = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "NumPad"); HealthRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard , 0 - , _topRow.TopLeft.X + , _topRow.BottomRight.Y*Scale , new List() , LinearGradientMode.Horizontal) - { Height = Scale, ContainedBrush = false }; + {Height = Scale, ContainedBrush = false}; ManaRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard , 0 - , _topRow.TopLeft.X+1 + , (_topRow.BottomRight.Y + 1)*Scale , new List() , LinearGradientMode.Horizontal) - { Height = Scale, ContainedBrush = false }; + {Height = Scale, ContainedBrush = false}; EventRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard , 0 , _topRow.TopLeft.X + 2 , new List() - , LinearGradientMode.Horizontal ) - {Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale - Scale - , Width = MainManager.KeyboardManager.ActiveKeyboard.Width*Scale-Scale-12}; + , LinearGradientMode.Horizontal) + { + Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale - Scale + , + Width = MainManager.KeyboardManager.ActiveKeyboard.Width*Scale - Scale - 12 + }; DayCycleRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard - , _keyPad.BottomRight.X * 3 - , _keyPad.TopLeft.X + , _keyPad.TopLeft.X*Scale + , _keyPad.TopLeft.Y*Scale , new List() , LinearGradientMode.Horizontal) { - Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale - Scale, - Width = MainManager.KeyboardManager.ActiveKeyboard.Width - (MainManager.KeyboardManager.ActiveKeyboard.Width * Scale - Scale - 12) + Height = _keyPad.GetRectangle().Height*Scale, + Width = _keyPad.GetRectangle().Width*Scale }; MainManager.GameStateWebServer.GameDataReceived += HandleGameData; Initialized = true; @@ -112,14 +100,11 @@ namespace Artemis.Modules.Games.Dota2 UpdateMana(); if (Settings.CanCastItem) UpdateItems(); - - - } private void UpdateMainColor() { - var list = new List { ColorHelpers.ToDrawingColor(Settings.MainColor) }; + var list = new List {ColorHelpers.ToDrawingColor(Settings.MainColor)}; EventRectangle.Colors = list; DayCycleRectangle.Colors = list; HealthRectangle.Colors = list; @@ -128,31 +113,31 @@ namespace Artemis.Modules.Games.Dota2 private void UpdateLifeStatus() { - var list = new List { Color.LightGray }; + var list = new List {Color.LightGray}; EventRectangle.Colors = list; DayCycleRectangle.Colors = list; HealthRectangle.Colors = list; ManaRectangle.Colors = list; - } private void UpdateDay() { - if (D2Json?.map?.daytime == null) return; if (D2Json.map.nightstalker_night) { - DayCycleRectangle.Colors = new List { Color.Blue }; + DayCycleRectangle.Colors = new List {Color.Blue}; return; } - var timeLeft = 240 - (D2Json.map.clock_time % 240); - double width = (int) ((MainManager.KeyboardManager.ActiveKeyboard.Width*Scale - (MainManager.KeyboardManager.ActiveKeyboard.Width * Scale - Scale*Scale)) * (timeLeft/240D)) ; - DayCycleRectangle.Width = (int) (width/2) > 1 ? (int)(width / 2)+1 : (int)(width / 2); - DayCycleRectangle.Colors = D2Json.map.daytime ? new List { Color.Yellow } : new List { Color.Blue }; - + var timeLeft = 240 - D2Json.map.clock_time%240; + var timePercentage = 100.00/240*timeLeft; + var test = _keyPad.GetRectangle().Width; + DayCycleRectangle.Width = (int) (_keyPad.GetRectangle().Width*Scale/100.00*timePercentage); + DayCycleRectangle.Colors = D2Json.map.daytime + ? new List {Color.Yellow} + : new List {Color.Blue}; } private void UpdateMana() @@ -161,8 +146,8 @@ namespace Artemis.Modules.Games.Dota2 return; var manaPercent = D2Json.hero.mana_percent; - ManaRectangle.Colors = new List { ColorHelpers.ToDrawingColor(Settings.ManaColor) }; - ManaRectangle.Width = (int)Math.Floor(_topRow.BottomRight.Y / 100.00 * manaPercent) * Scale; + ManaRectangle.Colors = new List {ColorHelpers.ToDrawingColor(Settings.ManaColor)}; + ManaRectangle.Width = (int) Math.Floor(_topRow.GetRectangle().Width*Scale/100.00*manaPercent); } private void UpdateItems() @@ -172,7 +157,6 @@ namespace Artemis.Modules.Games.Dota2 private void UpdateAbilities() { - //Console.WriteLine(); //Update keys according to the abilities they take. @@ -185,15 +169,14 @@ namespace Artemis.Modules.Games.Dota2 return; var healthPercent = D2Json.hero.health_percent; - if(healthPercent > 66) - HealthRectangle.Colors = new List { Color.Lime }; + if (healthPercent > 66) + HealthRectangle.Colors = new List {Color.Lime}; else if (healthPercent > 33) HealthRectangle.Colors = new List {Color.Yellow}; else HealthRectangle.Colors = new List {Color.Red}; - HealthRectangle.Width = (int)Math.Floor(_topRow.BottomRight.Y / 100.00 * healthPercent) * Scale; - + HealthRectangle.Width = (int) Math.Floor(_topRow.GetRectangle().Width*Scale/100.00*healthPercent); } @@ -208,13 +191,11 @@ namespace Artemis.Modules.Games.Dota2 HealthRectangle.Draw(g); ManaRectangle.Draw(g); DayCycleRectangle.Draw(g); - } return bitmap; } - public void HandleGameData(object sender, GameDataReceivedEventArgs e) { var jsonString = e.Json.ToString(); @@ -226,5 +207,17 @@ namespace Artemis.Modules.Games.Dota2 // Parse the JSON D2Json = JsonConvert.DeserializeObject(jsonString); } + + #region Variables + + public Dota2Settings Settings { get; set; } + public Dota2DataModel.Rootobject D2Json { get; set; } + public int Scale { get; set; } + public KeyboardRectangle HealthRectangle { get; set; } + public KeyboardRectangle EventRectangle { get; set; } + public KeyboardRectangle DayCycleRectangle { get; set; } + public KeyboardRectangle ManaRectangle { get; set; } + + #endregion } -} +} \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivision.Designer.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivision.Designer.cs new file mode 100644 index 000000000..56c0782d3 --- /dev/null +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivision.Designer.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Artemis.Modules.Games.TheDivision { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + internal sealed partial class TheDivision : global::System.Configuration.ApplicationSettingsBase { + + private static TheDivision defaultInstance = ((TheDivision)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new TheDivision()))); + + public static TheDivision Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool Enabled { + get { + return ((bool)(this["Enabled"])); + } + set { + this["Enabled"] = value; + } + } + } +} diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivision.settings b/Artemis/Artemis/Modules/Games/TheDivision/TheDivision.settings new file mode 100644 index 000000000..481a9b384 --- /dev/null +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivision.settings @@ -0,0 +1,9 @@ + + + + + + True + + + \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs new file mode 100644 index 000000000..a8b25b42e --- /dev/null +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs @@ -0,0 +1,51 @@ +using System.Drawing; +using Artemis.Managers; +using Artemis.Models; + +namespace Artemis.Modules.Games.TheDivision +{ + public class TheDivisionModel : GameModel + { + public TheDivisionModel(MainManager mainManager, TheDivisionSettings settings) : base(mainManager) + { + Settings = settings; + Name = "TheDivision"; + ProcessName = "TheDivision"; + Scale = 4; + Enabled = Settings.Enabled; + Initialized = false; + } + + public TheDivisionSettings Settings { get; set; } + + public int Scale { get; set; } + + public override void Dispose() + { + Initialized = false; + } + + public override void Enable() + { + Initialized = false; + + // Enable logic, if any + + Initialized = true; + } + + public override void Update() + { + } + + public override Bitmap GenerateBitmap() + { + var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); + using (var g = Graphics.FromImage(bitmap)) + { + g.Clear(Color.Transparent); + } + return bitmap; + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionSettings.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionSettings.cs new file mode 100644 index 000000000..8eaf0f65c --- /dev/null +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionSettings.cs @@ -0,0 +1,29 @@ +using Artemis.Models; + +namespace Artemis.Modules.Games.TheDivision +{ + public class TheDivisionSettings : GameSettings + { + public TheDivisionSettings() + { + Load(); + } + + public sealed override void Load() + { + Enabled = TheDivision.Default.Enabled; + } + + public sealed override void Save() + { + TheDivision.Default.Enabled = Enabled; + + TheDivision.Default.Save(); + } + + public sealed override void ToDefault() + { + Enabled = true; + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml new file mode 100644 index 000000000..b176265a5 --- /dev/null +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + Note: For this game to work with Artemis, please enable ... in The Division settings. + + + + +