diff --git a/Artemis/Artemis/DAL/ProfileProvider.cs b/Artemis/Artemis/DAL/ProfileProvider.cs index 1fa90629f..d70c395f9 100644 --- a/Artemis/Artemis/DAL/ProfileProvider.cs +++ b/Artemis/Artemis/DAL/ProfileProvider.cs @@ -51,7 +51,7 @@ namespace Artemis.DAL public static bool IsProfileUnique(ProfileModel profileModel) { var existing = ReadProfiles(profileModel.KeyboardSlug + "/" + profileModel.GameName); - return existing.Contains(profileModel); + return !existing.Contains(profileModel); } /// diff --git a/Artemis/Artemis/Models/EffectModel.cs b/Artemis/Artemis/Models/EffectModel.cs index eb81fd9de..428a435c7 100644 --- a/Artemis/Artemis/Models/EffectModel.cs +++ b/Artemis/Artemis/Models/EffectModel.cs @@ -38,7 +38,11 @@ namespace Artemis.Models public IDataModel DataModel { get; set; } public ProfileModel Profile { get; set; } - public abstract void Dispose(); + public virtual void Dispose() + { + if (Profile != null) + Profile.LuaWrapper = null; + } // Called on creation public abstract void Enable(); diff --git a/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs b/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs index 31f38bf92..2313363fe 100644 --- a/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs +++ b/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs @@ -25,6 +25,7 @@ namespace Artemis.Modules.Effects.ProfilePreview public override void Dispose() { Initialized = false; + base.Dispose(); } public override void Enable() diff --git a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs index d1588aaf4..5227ca653 100644 --- a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs +++ b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs @@ -34,6 +34,7 @@ namespace Artemis.Modules.Effects.WindowsProfile public override void Dispose() { Initialized = false; + base.Dispose(); } public override void Enable() @@ -195,8 +196,12 @@ namespace Artemis.Modules.Effects.WindowsProfile SetupSpotify(); var status = _spotify.GetStatus(); + if (status == null) + return; + dataModel.Spotify.Playing = status.Playing; dataModel.Spotify.Running = SpotifyLocalAPI.IsSpotifyRunning(); + if (status.Track != null) { dataModel.Spotify.Artist = status.Track.ArtistResource?.Name; @@ -206,8 +211,10 @@ namespace Artemis.Modules.Effects.WindowsProfile } if (dataModel.Spotify.SongLength > 0) + { dataModel.Spotify.SongPercentCompleted = (int) (status.PlayingPosition/dataModel.Spotify.SongLength*100.0); + } } #endregion diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs index 6287b3e19..bbbd5a5cc 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs @@ -34,6 +34,7 @@ namespace Artemis.Modules.Games.CounterStrike { Initialized = false; MainManager.GameStateWebServer.GameDataReceived -= HandleGameData; + base.Dispose(); } public override void Enable() diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs index 1b42e6989..fb1ad8fa3 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs @@ -26,12 +26,11 @@ namespace Artemis.Modules.Games.Dota2 { Initialized = false; MainManager.GameStateWebServer.GameDataReceived -= HandleGameData; + base.Dispose(); } public override void Enable() { - Initialized = false; - MainManager.GameStateWebServer.GameDataReceived += HandleGameData; Initialized = true; } diff --git a/Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2Model.cs b/Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2Model.cs index 9bbe52d92..481e80f89 100644 --- a/Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2Model.cs +++ b/Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2Model.cs @@ -27,6 +27,7 @@ namespace Artemis.Modules.Games.EurotruckSimulator2 public override void Dispose() { Initialized = false; + base.Dispose(); } public override void Enable() diff --git a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs index adfc83c35..6b2ff6211 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs +++ b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs @@ -91,6 +91,7 @@ namespace Artemis.Modules.Games.Overwatch _stickyUltimateUsed.Dispose(); MainManager.PipeServer.PipeMessage -= PipeServerOnPipeMessage; + base.Dispose(); } private void PipeServerOnPipeMessage(string message) diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs index 8da2d0d0d..10a13ae7c 100644 --- a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs +++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs @@ -50,6 +50,7 @@ namespace Artemis.Modules.Games.RocketLeague { Initialized = false; _memory = null; + base.Dispose(); } public override void Enable() diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs index 78555c95a..c4c1b1bd8 100644 --- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs @@ -42,6 +42,7 @@ namespace Artemis.Modules.Games.TheDivision _stickyHp.Dispose(); MainManager.PipeServer.PipeMessage -= PipeServerOnPipeMessage; + base.Dispose(); } public override void Enable() diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs index c8c1f3b75..594e9f119 100644 --- a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs +++ b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs @@ -35,6 +35,7 @@ namespace Artemis.Modules.Games.UnrealTournament _killTimer.Stop(); MainManager.PipeServer.PipeMessage -= PipeServerOnPipeMessage; + base.Dispose(); } public override void Enable() diff --git a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs index 7e13a7daa..25f1fcc60 100644 --- a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs +++ b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs @@ -38,6 +38,7 @@ namespace Artemis.Modules.Games.Witcher3 _witcherSettings = null; _updateSw.Reset(); + base.Dispose(); } public override void Enable() diff --git a/Artemis/Artemis/Modules/Games/WoW/WoWModel.cs b/Artemis/Artemis/Modules/Games/WoW/WoWModel.cs index ad4403d55..6ec8e2fe0 100644 --- a/Artemis/Artemis/Modules/Games/WoW/WoWModel.cs +++ b/Artemis/Artemis/Modules/Games/WoW/WoWModel.cs @@ -73,6 +73,7 @@ namespace Artemis.Modules.Games.WoW _process.Dispose(); _process = null; + base.Dispose(); } public override void Enable() diff --git a/Artemis/Artemis/Profiles/Lua/LuaDrawWrapper.cs b/Artemis/Artemis/Profiles/Lua/LuaDrawWrapper.cs index 4087c849b..8d5b91bd6 100644 --- a/Artemis/Artemis/Profiles/Lua/LuaDrawWrapper.cs +++ b/Artemis/Artemis/Profiles/Lua/LuaDrawWrapper.cs @@ -19,6 +19,11 @@ namespace Artemis.Profiles.Lua public void DrawEllipse(LuaBrush luaBrush, double x, double y, double height, double width) { + x *= 4; + y *= 4; + height *= 4; + width *= 4; + var center = new Point(x + width/2, y + height/2); _ctx.DrawEllipse(luaBrush.Brush, new Pen(), center, width, height); } @@ -26,16 +31,30 @@ namespace Artemis.Profiles.Lua public void DrawLine(LuaBrush luaBrush, double startX, double startY, double endX, double endY, double thickness) { + startX *= 4; + startY *= 4; + endX *= 4; + endY *= 4; + thickness *= 4; + _ctx.DrawLine(new Pen(luaBrush.Brush, thickness), new Point(startX, startY), new Point(endX, endY)); } public void DrawRectangle(LuaBrush luaBrush, double x, double y, double height, double width) { + x *= 4; + y *= 4; + height *= 4; + width *= 4; + _ctx.DrawRectangle(luaBrush.Brush, new Pen(), new Rect(x, y, width, height)); } public void DrawText(string text, string fontName, int fontSize, LuaBrush luaBrush, double x, double y) { + x *= 4; + y *= 4; + var font = Fonts.SystemTypefaces.FirstOrDefault(f => f.FontFamily.ToString() == fontName); if (font == null) throw new ScriptRuntimeException($"Font '{fontName}' not found"); diff --git a/Artemis/Artemis/Profiles/ProfileModel.cs b/Artemis/Artemis/Profiles/ProfileModel.cs index 191fd38a0..7d41b6f94 100644 --- a/Artemis/Artemis/Profiles/ProfileModel.cs +++ b/Artemis/Artemis/Profiles/ProfileModel.cs @@ -11,6 +11,7 @@ using Artemis.Profiles.Layers.Models; using Artemis.Profiles.Lua; using Artemis.Utilities; using Artemis.Utilities.ParentChild; +using Castle.Core.Internal; using Newtonsoft.Json; using Color = System.Windows.Media.Color; using Point = System.Windows.Point; @@ -23,7 +24,6 @@ namespace Artemis.Profiles public ProfileModel() { Layers = new ChildItemCollection(this); - LuaWrapper = new LuaWrapper(this); } /// @@ -106,6 +106,9 @@ namespace Artemis.Profiles internal void DrawLayers(Graphics g, IEnumerable renderLayers, IDataModel dataModel, Rect rect, bool preview, bool updateAnimations) { + if (LuaWrapper == null && !LuaScript.IsNullOrEmpty()) + LuaWrapper = new LuaWrapper(this); + var visual = new DrawingVisual(); var layerModels = renderLayers.ToList(); using (var c = visual.RenderOpen()) diff --git a/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs index e81f159b8..eb7643546 100644 --- a/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs @@ -17,6 +17,7 @@ using Artemis.Models; using Artemis.Profiles; using Artemis.Profiles.Layers.Models; using Artemis.Profiles.Layers.Types.Folder; +using Artemis.Profiles.Lua; using Artemis.Services; using Artemis.Styles.DropTargetAdorners; using Artemis.Utilities; @@ -231,6 +232,8 @@ namespace Artemis.ViewModels.Profiles public void Deactivate() { ProfileViewModel.Deactivate(); + if (SelectedProfile != null) + SelectedProfile.LuaWrapper = null; _saveTimer.Stop(); } @@ -699,9 +702,14 @@ namespace Artemis.ViewModels.Profiles public void EditLua() { + if (SelectedProfile == null) + return; try { - SelectedProfile?.LuaWrapper.OpenEditor(); + if (SelectedProfile.LuaWrapper == null) + SelectedProfile.LuaWrapper = new LuaWrapper(SelectedProfile); + + SelectedProfile.LuaWrapper.OpenEditor(); } catch (Exception e) { diff --git a/Artemis/Artemis/Views/Profiles/ProfileEditorView.xaml b/Artemis/Artemis/Views/Profiles/ProfileEditorView.xaml index ce75559e7..c4cfd119c 100644 --- a/Artemis/Artemis/Views/Profiles/ProfileEditorView.xaml +++ b/Artemis/Artemis/Views/Profiles/ProfileEditorView.xaml @@ -146,7 +146,8 @@