diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index 4a43c96f0..381d9d8d9 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -574,6 +574,7 @@ + LuaWindowView.xaml diff --git a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchDataModel.cs b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchDataModel.cs index d88a3a28e..72895b27d 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchDataModel.cs +++ b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchDataModel.cs @@ -48,6 +48,8 @@ namespace Artemis.Modules.Games.Overwatch Symmetra, Zenyatta, Ana, - Sombra + Sombra, + Orisa, + Doomfist } } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs index 819611cb0..4a216cd99 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs +++ b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs @@ -76,7 +76,9 @@ namespace Artemis.Modules.Games.Overwatch new CharacterColor {Character = OverwatchCharacter.Symmetra, Color = Color.FromRgb(46, 116, 148)}, new CharacterColor {Character = OverwatchCharacter.Zenyatta, Color = Color.FromRgb(248, 218, 26)}, new CharacterColor {Character = OverwatchCharacter.Ana, Color = Color.FromRgb(16, 36, 87)}, - new CharacterColor {Character = OverwatchCharacter.Sombra, Color = Color.FromRgb(20, 5, 101)} + new CharacterColor {Character = OverwatchCharacter.Sombra, Color = Color.FromRgb(20, 5, 101)}, + new CharacterColor {Character = OverwatchCharacter.Orisa, Color = Color.FromRgb(1,40,0)}, + new CharacterColor {Character = OverwatchCharacter.Doomfist, Color = Color.FromRgb(33, 3, 1)} }; } diff --git a/Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaSlider.cs b/Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaSlider.cs new file mode 100644 index 000000000..0a14af4f8 --- /dev/null +++ b/Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaSlider.cs @@ -0,0 +1,57 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using Artemis.Managers; +using MoonSharp.Interpreter; +using MoonSharp.Interpreter.Interop; + +namespace Artemis.Profiles.Lua.Modules.Gui +{ + [MoonSharpUserData] + public class LuaSlider + { + private readonly LuaManager _luaManager; + + public LuaSlider(LuaManager luaManager, int interval, double intialValue, double minimum, double maximum, double x, double y, double? width, double? height) + { + _luaManager = luaManager; + + Slider = new Slider { Value = intialValue, TickFrequency = interval, Minimum = minimum, Maximum = maximum, TickPlacement = TickPlacement.BottomRight, IsSnapToTickEnabled = true}; + + if (width != null) + Slider.Width = width.Value; + if (height != null) + Slider.Height = height.Value; + + Slider.ValueChanged += SliderOnValueChanged; + } + + [MoonSharpVisible(false)] + public Slider Slider { get; } + + public double Value + { + get => Slider.Dispatcher.Invoke(() => (double) Slider.Value); + set => Slider.Dispatcher.Invoke(() => Slider.Value = value); + } + + public int Interval + { + get => Slider.Dispatcher.Invoke(() => (int) Slider.Interval); + set => Slider.Dispatcher.Invoke(() => Slider.Interval = value); + } + + private void SliderOnValueChanged(object sender, RoutedPropertyChangedEventArgs routedPropertyChangedEventArgs) + { + _luaManager.EventsModule.LuaInvoke(_luaManager.ProfileModel, () => OnValueChanged(this)); + } + + public event EventHandler ValueChanged; + + protected virtual void OnValueChanged(LuaSlider slider) + { + ValueChanged?.Invoke(slider, null); + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaWindowViewModel.cs b/Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaWindowViewModel.cs index 5c927cdb1..f7201069e 100644 --- a/Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaWindowViewModel.cs +++ b/Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaWindowViewModel.cs @@ -83,6 +83,18 @@ namespace Artemis.Profiles.Lua.Modules.Gui return element; } + public LuaSlider CreateSlider(int interval, double initialValue, double minimum, double maximum, double x, double y, double? width = 200.0, double? height = 20.0) + { + LuaSlider element = null; + Execute.OnUIThread(() => + { + element = new LuaSlider(_luaManager, interval, initialValue, minimum, maximum, x, y, width, height); + AddControl(element.Slider, x, y); + }); + + return element; + } + private void AddControl(UIElement uiElement, double x, double y) { Canvas.Children.Add(uiElement);