diff --git a/Artemis/Artemis/App.config b/Artemis/Artemis/App.config index b9c62fe8d..ccd0770ac 100644 --- a/Artemis/Artemis/App.config +++ b/Artemis/Artemis/App.config @@ -3,6 +3,7 @@ +
@@ -24,6 +25,17 @@ + + + True + + + Default + + + + + True @@ -82,14 +94,8 @@ True - - #FFFF5000 - - - #FFFF0000 - - - False + + Default @@ -156,6 +162,9 @@ True + + Default + diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index bb57d99e2..08a80f95e 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -390,7 +390,6 @@ - @@ -635,6 +634,7 @@ + diff --git a/Artemis/Artemis/InjectionFactories/IProfileEditorViewModelFactory.cs b/Artemis/Artemis/InjectionFactories/IProfileEditorViewModelFactory.cs index 31eb5138c..38b247a80 100644 --- a/Artemis/Artemis/InjectionFactories/IProfileEditorViewModelFactory.cs +++ b/Artemis/Artemis/InjectionFactories/IProfileEditorViewModelFactory.cs @@ -1,6 +1,5 @@ using Artemis.Managers; using Artemis.Models; -using Artemis.ViewModels; using Artemis.ViewModels.Profiles; using Caliburn.Micro; @@ -8,7 +7,6 @@ namespace Artemis.InjectionFactories { public interface IProfileEditorViewModelFactory { - ProfileEditorViewModel CreateProfileEditorViewModel(IEventAggregator events, MainManager mainManager, - GameModel gameModel); + ProfileEditorViewModel CreateProfileEditorViewModel(IEventAggregator events, MainManager mainManager, GameModel gameModel, string lastProfile); } } \ No newline at end of file diff --git a/Artemis/Artemis/Managers/MainManager.cs b/Artemis/Artemis/Managers/MainManager.cs index e1be2e03b..fee8dea5e 100644 --- a/Artemis/Artemis/Managers/MainManager.cs +++ b/Artemis/Artemis/Managers/MainManager.cs @@ -46,7 +46,9 @@ namespace Artemis.Managers ProgramEnabled = false; Running = false; - KeyboardHook = new KeyboardHook(); // TODO: DI + + // TODO: Dependency inject utilities? + KeyboardHook = new KeyboardHook(); // Create and start the web server GameStateWebServer = new GameStateWebServer(); diff --git a/Artemis/Artemis/Models/GameSettings.cs b/Artemis/Artemis/Models/GameSettings.cs index dcfe3527f..fe026cfb4 100644 --- a/Artemis/Artemis/Models/GameSettings.cs +++ b/Artemis/Artemis/Models/GameSettings.cs @@ -3,5 +3,6 @@ public abstract class GameSettings : EffectSettings { public bool Enabled { get; set; } + public string LastProfile { get; set; } } } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrike.Designer.cs b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrike.Designer.cs index ffed5f5c6..e9ab9d8e4 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrike.Designer.cs +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrike.Designer.cs @@ -130,5 +130,17 @@ namespace Artemis.Modules.Games.CounterStrike { this["LowHpEnabled"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Default")] + public string LastProfile { + get { + return ((string)(this["LastProfile"])); + } + set { + this["LastProfile"] = value; + } + } } } diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrike.settings b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrike.settings index 6ad6a4586..5db37a7aa 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrike.settings +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrike.settings @@ -1,12 +1,13 @@  - - + True + + Default + @@ -30,6 +31,6 @@ True - + \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeSettings.cs b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeSettings.cs index ec32679d9..96141065c 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeSettings.cs +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeSettings.cs @@ -24,6 +24,7 @@ namespace Artemis.Modules.Games.CounterStrike public sealed override void Load() { Enabled = CounterStrike.Default.Enabled; + LastProfile = CounterStrike.Default.LastProfile; GameDirectory = CounterStrike.Default.GameDirectory; AmmoEnabled = CounterStrike.Default.AmmoEnabled; diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs index d91aee1af..d2908da24 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs @@ -3,6 +3,7 @@ using System.Windows.Forms; using Artemis.InjectionFactories; using Artemis.Managers; using Artemis.Properties; +using Artemis.Utilities; using Artemis.ViewModels.Abstract; using Caliburn.Micro; @@ -14,11 +15,25 @@ namespace Artemis.Modules.Games.CounterStrike : base(main, new CounterStrikeModel(main, new CounterStrikeSettings()), events, pFactory) { DisplayName = "CS:GO"; - MainManager.EffectManager.EffectModels.Add(GameModel); + + FindGameDir(); PlaceConfigFile(); } + public void FindGameDir() + { + var gameSettings = (CounterStrikeSettings) GameSettings; + // If already propertly set up, don't do anything + if (gameSettings.GameDirectory != null && File.Exists(gameSettings.GameDirectory + "csgo.exe") && + File.Exists(gameSettings.GameDirectory + "/csgo/cfg/gamestate_integration_artemis.cfg")) + return; + + var dir = GeneralHelpers.FindSteamGame(@"\Counter-Strike Global Offensive\csgo.exe"); + gameSettings.GameDirectory = dir ?? string.Empty; + gameSettings.Save(); + } + public void BrowseDirectory() { var dialog = new FolderBrowserDialog {SelectedPath = ((CounterStrikeSettings) GameSettings).GameDirectory}; @@ -26,7 +41,7 @@ namespace Artemis.Modules.Games.CounterStrike if (result != DialogResult.OK) return; - ((CounterStrikeSettings) GameSettings).GameDirectory = dialog.SelectedPath; + ((CounterStrikeSettings) GameSettings).GameDirectory = Path.GetDirectoryName(dialog.SelectedPath); NotifyOfPropertyChange(() => GameSettings); GameSettings.Save(); @@ -37,22 +52,22 @@ namespace Artemis.Modules.Games.CounterStrike { if (((CounterStrikeSettings) GameSettings).GameDirectory == string.Empty) return; - if (Directory.Exists(((CounterStrikeSettings) GameSettings).GameDirectory + "/csgo/cfg")) + + var path = ((CounterStrikeSettings) GameSettings).GameDirectory; + if (Directory.Exists(path + "/csgo/cfg")) { var cfgFile = Resources.csgoGamestateConfiguration.Replace("{{port}}", MainManager.GameStateWebServer.Port.ToString()); - File.WriteAllText( - ((CounterStrikeSettings) GameSettings).GameDirectory + "/csgo/cfg/gamestate_integration_artemis.cfg", - cfgFile); + File.WriteAllText(path + "/csgo/cfg/gamestate_integration_artemis.cfg", cfgFile); return; } DialogService.ShowErrorMessageBox("Please select a valid CS:GO directory\n\n" + - @"By default CS:GO is in \SteamApps\common\Counter-Strike Global Offensive"); + @"By default CS:GO is in \SteamApps\common\Counter-Strike Global Offensive"); + ((CounterStrikeSettings) GameSettings).GameDirectory = string.Empty; NotifyOfPropertyChange(() => GameSettings); - GameSettings.Save(); } } diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2.Designer.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2.Designer.cs index e098aeae3..8e1cd92e2 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2.Designer.cs +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2.Designer.cs @@ -35,6 +35,18 @@ namespace Artemis.Modules.Games.Dota2 { } } + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Default")] + public string LastProfile { + get { + return ((string)(this["LastProfile"])); + } + set { + this["LastProfile"] = value; + } + } + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2.settings b/Artemis/Artemis/Modules/Games/Dota2/Dota2.settings index d372969e1..557cc1a44 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2.settings +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2.settings @@ -7,6 +7,9 @@ True + + Default + diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2Settings.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2Settings.cs index b5a67832e..ada8893d1 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2Settings.cs +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2Settings.cs @@ -29,14 +29,16 @@ namespace Artemis.Modules.Games.Dota2 public override void Save() { + Dota2.Default.Enabled = Enabled; + Dota2.Default.LastProfile = LastProfile; + Dota2.Default.GameDirectory = GameDirectory; + Dota2.Default.KeyboardLayout = KeyboardLayout; Dota2.Default.MainColor = MainColor; Dota2.Default.ManaColor = ManaColor; Dota2.Default.ShowDayCycle = ShowDayCycle; Dota2.Default.ShowHealth = ShowHealth; Dota2.Default.CanCastAbility = CanCastAbility; - Dota2.Default.Enabled = Enabled; - Dota2.Default.GameDirectory = GameDirectory; Dota2.Default.ShowMana = ShowMana; Dota2.Default.ShowEvents = ShowEvents; Dota2.Default.AbilityCooldownColor = AbilityCooldownColor; diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs index 4e2d35cc9..2334c907a 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs @@ -3,6 +3,7 @@ using System.Windows.Forms; using Artemis.InjectionFactories; using Artemis.Managers; using Artemis.Properties; +using Artemis.Utilities; using Artemis.ViewModels.Abstract; using Caliburn.Micro; @@ -14,11 +15,28 @@ namespace Artemis.Modules.Games.Dota2 : base(main, new Dota2Model(main, new Dota2Settings()), events, pFactory) { DisplayName = "Dota 2"; - MainManager.EffectManager.EffectModels.Add(GameModel); + + FindGameDir(); PlaceConfigFile(); } - + + public void FindGameDir() + { + var gameSettings = (Dota2Settings)GameSettings; + // If already propertly set up, don't do anything + if (gameSettings.GameDirectory != null && File.Exists(gameSettings.GameDirectory + "csgo.exe") && + File.Exists(gameSettings.GameDirectory + "/csgo/cfg/gamestate_integration_artemis.cfg")) + return; + + var dir = GeneralHelpers.FindSteamGame(@"\dota 2 beta\game\bin\win32\dota2.exe"); + // Remove subdirectories where they stuck the executable + dir = dir?.Substring(0, dir.Length - 15); + + gameSettings.GameDirectory = dir ?? string.Empty; + gameSettings.Save(); + } + public void BrowseDirectory() { var dialog = new FolderBrowserDialog {SelectedPath = ((Dota2Settings) GameSettings).GameDirectory}; diff --git a/Artemis/Artemis/Modules/Games/Overwatch/Overwatch.Designer.cs b/Artemis/Artemis/Modules/Games/Overwatch/Overwatch.Designer.cs index 48ef16045..eafa814c5 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/Overwatch.Designer.cs +++ b/Artemis/Artemis/Modules/Games/Overwatch/Overwatch.Designer.cs @@ -34,5 +34,29 @@ namespace Artemis.Modules.Games.Overwatch { this["Enabled"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Default")] + public string LastProfile { + get { + return ((string)(this["LastProfile"])); + } + set { + this["LastProfile"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string GameDirectory { + get { + return ((string)(this["GameDirectory"])); + } + set { + this["GameDirectory"] = value; + } + } } } diff --git a/Artemis/Artemis/Modules/Games/Overwatch/Overwatch.settings b/Artemis/Artemis/Modules/Games/Overwatch/Overwatch.settings index adbc00bca..6cea9b2f7 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/Overwatch.settings +++ b/Artemis/Artemis/Modules/Games/Overwatch/Overwatch.settings @@ -1,11 +1,15 @@  - - + True + + Default + + + + \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchSettings.cs b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchSettings.cs index bb21734fb..77a1effcc 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchSettings.cs +++ b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchSettings.cs @@ -12,18 +12,25 @@ namespace Artemis.Modules.Games.Overwatch public sealed override void Load() { Enabled = Overwatch.Default.Enabled; + LastProfile = Overwatch.Default.LastProfile; + GameDirectory = Overwatch.Default.GameDirectory; } public sealed override void Save() { Overwatch.Default.Enabled = Enabled; + Overwatch.Default.LastProfile = LastProfile; + Overwatch.Default.GameDirectory = GameDirectory; Overwatch.Default.Save(); } + public string GameDirectory { get; set; } + public sealed override void ToDefault() { Enabled = true; + GameDirectory = string.Empty; } } } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml index c999b204f..27d671165 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml +++ b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml @@ -13,13 +13,10 @@ - - - - + @@ -38,11 +35,26 @@ + + +