mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-01-01 10:13:30 +00:00
Added keyboard stuff to LUA
This commit is contained in:
parent
53e8e9c44e
commit
e5608907e4
@ -415,11 +415,16 @@
|
|||||||
<Compile Include="Profiles\Layers\Types\Mousemat\MousematPropertiesViewModel.cs" />
|
<Compile Include="Profiles\Layers\Types\Mousemat\MousematPropertiesViewModel.cs" />
|
||||||
<Compile Include="Profiles\Layers\Types\Mousemat\MousematType.cs" />
|
<Compile Include="Profiles\Layers\Types\Mousemat\MousematType.cs" />
|
||||||
<Compile Include="Profiles\Lua\Brushes\LuaBrush.cs" />
|
<Compile Include="Profiles\Lua\Brushes\LuaBrush.cs" />
|
||||||
|
<Compile Include="Profiles\Lua\Brushes\LuaColor.cs" />
|
||||||
<Compile Include="Profiles\Lua\Brushes\LuaLinearGradientBrush.cs" />
|
<Compile Include="Profiles\Lua\Brushes\LuaLinearGradientBrush.cs" />
|
||||||
<Compile Include="Profiles\Lua\Brushes\LuaRadialGradientBrush.cs" />
|
<Compile Include="Profiles\Lua\Brushes\LuaRadialGradientBrush.cs" />
|
||||||
<Compile Include="Profiles\Lua\LuaBrushWrapper.cs" />
|
<Compile Include="Profiles\Lua\Events\LuaKeyPressEventArgs.cs" />
|
||||||
|
<Compile Include="Profiles\Lua\Events\LuaProfileDrawingEventArgs.cs" />
|
||||||
|
<Compile Include="Profiles\Lua\Events\LuaProfileUpdatingEventArgs.cs" />
|
||||||
|
<Compile Include="Profiles\Lua\Brushes\LuaBrushWrapper.cs" />
|
||||||
<Compile Include="Profiles\Lua\LuaDrawWrapper.cs" />
|
<Compile Include="Profiles\Lua\LuaDrawWrapper.cs" />
|
||||||
<Compile Include="Profiles\Lua\LuaEventsWrapper.cs" />
|
<Compile Include="Profiles\Lua\Events\LuaEventsWrapper.cs" />
|
||||||
|
<Compile Include="Profiles\Lua\LuaKeyboardWrapper.cs" />
|
||||||
<Compile Include="Profiles\Lua\LuaLayerWrapper.cs" />
|
<Compile Include="Profiles\Lua\LuaLayerWrapper.cs" />
|
||||||
<Compile Include="Profiles\Lua\LuaProfileWrapper.cs" />
|
<Compile Include="Profiles\Lua\LuaProfileWrapper.cs" />
|
||||||
<Compile Include="Profiles\Lua\Brushes\LuaSolidColorBrush.cs" />
|
<Compile Include="Profiles\Lua\Brushes\LuaSolidColorBrush.cs" />
|
||||||
|
|||||||
@ -8,6 +8,7 @@ using Artemis.Models.Interfaces;
|
|||||||
using Artemis.Profiles;
|
using Artemis.Profiles;
|
||||||
using Artemis.Profiles.Layers.Interfaces;
|
using Artemis.Profiles.Layers.Interfaces;
|
||||||
using Artemis.Profiles.Layers.Models;
|
using Artemis.Profiles.Layers.Models;
|
||||||
|
using Artemis.Profiles.Lua;
|
||||||
using Artemis.Settings;
|
using Artemis.Settings;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
@ -40,8 +41,10 @@ namespace Artemis.Models
|
|||||||
|
|
||||||
public virtual void Dispose()
|
public virtual void Dispose()
|
||||||
{
|
{
|
||||||
if (Profile != null)
|
if (Profile?.LuaWrapper == null)
|
||||||
Profile.LuaWrapper = null;
|
return;
|
||||||
|
Profile.LuaWrapper.Dispose();
|
||||||
|
Profile.LuaWrapper = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called on creation
|
// Called on creation
|
||||||
@ -66,12 +69,16 @@ namespace Artemis.Models
|
|||||||
// Get all enabled layers who's conditions are met
|
// Get all enabled layers who's conditions are met
|
||||||
var renderLayers = GetRenderLayers(keyboardOnly);
|
var renderLayers = GetRenderLayers(keyboardOnly);
|
||||||
|
|
||||||
|
// If the profile has no active LUA wrapper, create one
|
||||||
|
if (Profile.LuaWrapper == null && !string.IsNullOrEmpty(Profile.LuaScript))
|
||||||
|
Profile.LuaWrapper = new LuaWrapper(Profile, MainManager.DeviceManager.ActiveKeyboard);
|
||||||
|
|
||||||
// Render the keyboard layer-by-layer
|
// Render the keyboard layer-by-layer
|
||||||
var keyboardRect = MainManager.DeviceManager.ActiveKeyboard.KeyboardRectangle(KeyboardScale);
|
var keyboardRect = MainManager.DeviceManager.ActiveKeyboard.KeyboardRectangle(KeyboardScale);
|
||||||
using (var g = Graphics.FromImage(frame.KeyboardBitmap))
|
using (var g = Graphics.FromImage(frame.KeyboardBitmap))
|
||||||
{
|
{
|
||||||
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
|
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
|
||||||
DataModel, keyboardRect, false, true);
|
DataModel, keyboardRect, false, true, true);
|
||||||
}
|
}
|
||||||
// Render mice layer-by-layer
|
// Render mice layer-by-layer
|
||||||
var devRec = new Rect(0, 0, 40, 40);
|
var devRec = new Rect(0, 0, 40, 40);
|
||||||
|
|||||||
@ -7,6 +7,7 @@ using Artemis.Models;
|
|||||||
using Artemis.Models.Interfaces;
|
using Artemis.Models.Interfaces;
|
||||||
using Artemis.Profiles.Layers.Interfaces;
|
using Artemis.Profiles.Layers.Interfaces;
|
||||||
using Artemis.Profiles.Layers.Models;
|
using Artemis.Profiles.Layers.Models;
|
||||||
|
using Artemis.Profiles.Lua;
|
||||||
using Artemis.ViewModels.Profiles;
|
using Artemis.ViewModels.Profiles;
|
||||||
using Castle.Components.DictionaryAdapter;
|
using Castle.Components.DictionaryAdapter;
|
||||||
using MoonSharp.Interpreter;
|
using MoonSharp.Interpreter;
|
||||||
@ -52,13 +53,16 @@ namespace Artemis.Modules.Effects.ProfilePreview
|
|||||||
// Get all enabled layers who's conditions are met
|
// Get all enabled layers who's conditions are met
|
||||||
var renderLayers = GetRenderLayers(keyboardOnly);
|
var renderLayers = GetRenderLayers(keyboardOnly);
|
||||||
|
|
||||||
|
// If the profile has no active LUA wrapper, create one
|
||||||
|
if (Profile.LuaWrapper == null && !string.IsNullOrEmpty(Profile.LuaScript))
|
||||||
|
Profile.LuaWrapper = new LuaWrapper(Profile, MainManager.DeviceManager.ActiveKeyboard);
|
||||||
|
|
||||||
// Render the keyboard layer-by-layer
|
// Render the keyboard layer-by-layer
|
||||||
var keyboardRect = MainManager.DeviceManager.ActiveKeyboard.KeyboardRectangle(KeyboardScale);
|
var keyboardRect = MainManager.DeviceManager.ActiveKeyboard.KeyboardRectangle(KeyboardScale);
|
||||||
using (var g = Graphics.FromImage(frame.KeyboardBitmap))
|
using (var g = Graphics.FromImage(frame.KeyboardBitmap))
|
||||||
{
|
{
|
||||||
Profile.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
|
Profile.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
|
||||||
DataModel,
|
DataModel, keyboardRect, true, true, true);
|
||||||
keyboardRect, true, true);
|
|
||||||
}
|
}
|
||||||
// Render mice layer-by-layer
|
// Render mice layer-by-layer
|
||||||
var devRec = new Rect(0, 0, 40, 40);
|
var devRec = new Rect(0, 0, 40, 40);
|
||||||
|
|||||||
@ -55,9 +55,9 @@ namespace Artemis.Profiles.Layers.Types.Audio
|
|||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<byte> SpectrumData { get; set; } = new List<byte>();
|
public List<byte> SpectrumData { get; set; } = new List<byte>();
|
||||||
|
|
||||||
public string Name { get; } = "Keyboard - Audio visualization";
|
public string Name => "Keyboard - Audio visualization";
|
||||||
public bool ShowInEdtor { get; } = true;
|
public bool ShowInEdtor => true;
|
||||||
public DrawType DrawType { get; } = DrawType.Keyboard;
|
public DrawType DrawType => DrawType.Keyboard;
|
||||||
|
|
||||||
public ImageSource DrawThumbnail(LayerModel layer)
|
public ImageSource DrawThumbnail(LayerModel layer)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,13 +19,13 @@ namespace Artemis.Profiles.Layers.Types.KeyPress
|
|||||||
{
|
{
|
||||||
internal class KeyPressType : ILayerType
|
internal class KeyPressType : ILayerType
|
||||||
{
|
{
|
||||||
private readonly MainManager _mainManager;
|
private readonly DeviceManager _deviceManager;
|
||||||
private List<LayerModel> _keyPressLayers = new List<LayerModel>();
|
private List<LayerModel> _keyPressLayers = new List<LayerModel>();
|
||||||
private LayerModel _layerModel;
|
private LayerModel _layerModel;
|
||||||
|
|
||||||
public KeyPressType(MainManager mainManager)
|
public KeyPressType(DeviceManager deviceManager)
|
||||||
{
|
{
|
||||||
_mainManager = mainManager;
|
_deviceManager = deviceManager;
|
||||||
KeyboardHook.KeyDownCallback += KeyboardHookOnKeyDownCallback;
|
KeyboardHook.KeyDownCallback += KeyboardHookOnKeyDownCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,8 +61,8 @@ namespace Artemis.Profiles.Layers.Types.KeyPress
|
|||||||
public void Update(LayerModel layerModel, IDataModel dataModel, bool isPreview = false)
|
public void Update(LayerModel layerModel, IDataModel dataModel, bool isPreview = false)
|
||||||
{
|
{
|
||||||
// Key press is always as large as the entire keyboard it is drawn for
|
// Key press is always as large as the entire keyboard it is drawn for
|
||||||
layerModel.Properties.Width = _mainManager.DeviceManager.ActiveKeyboard.Width;
|
layerModel.Properties.Width = _deviceManager.ActiveKeyboard.Width;
|
||||||
layerModel.Properties.Height = _mainManager.DeviceManager.ActiveKeyboard.Height;
|
layerModel.Properties.Height = _deviceManager.ActiveKeyboard.Height;
|
||||||
layerModel.Properties.X = 0;
|
layerModel.Properties.X = 0;
|
||||||
layerModel.Properties.Y = 0;
|
layerModel.Properties.Y = 0;
|
||||||
layerModel.Properties.Contain = true;
|
layerModel.Properties.Contain = true;
|
||||||
@ -126,7 +126,7 @@ namespace Artemis.Profiles.Layers.Types.KeyPress
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var keyMatch = _mainManager.DeviceManager.ActiveKeyboard.GetKeyPosition(e.KeyCode);
|
var keyMatch = _deviceManager.ActiveKeyboard.GetKeyPosition(e.KeyCode);
|
||||||
if (keyMatch == null)
|
if (keyMatch == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
45
Artemis/Artemis/Profiles/Lua/Brushes/LuaBrushWrapper.cs
Normal file
45
Artemis/Artemis/Profiles/Lua/Brushes/LuaBrushWrapper.cs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Artemis.Utilities;
|
||||||
|
using CUE.NET.Helper;
|
||||||
|
using MoonSharp.Interpreter;
|
||||||
|
|
||||||
|
namespace Artemis.Profiles.Lua.Brushes
|
||||||
|
{
|
||||||
|
[MoonSharpUserData]
|
||||||
|
public class LuaBrushWrapper
|
||||||
|
{
|
||||||
|
public LuaColor GetColor(string hexCode)
|
||||||
|
{
|
||||||
|
return new LuaColor(hexCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LuaColor GetColor(byte a, byte r, byte g, byte b)
|
||||||
|
{
|
||||||
|
return new LuaColor(a, r, g, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LuaColor GetRandomColor()
|
||||||
|
{
|
||||||
|
return new LuaColor(ColorHelpers.GetRandomRainbowMediaColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
public LuaSolidColorBrush GetSolidColorBrush(LuaColor color)
|
||||||
|
{
|
||||||
|
return new LuaSolidColorBrush(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LuaLinearGradientBrush GetLinearGradientBrush(Dictionary<LuaColor, double> gradientColors,
|
||||||
|
double startX = 0.5, double startY = 0.0, double endX = 0.5, double endY = 1.0)
|
||||||
|
{
|
||||||
|
return new LuaLinearGradientBrush(gradientColors, startX, startY, endX, endY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Check default values
|
||||||
|
public LuaRadialGradientBrush GetRadialGradientBrush(Dictionary<LuaColor, double> gradientColors,
|
||||||
|
double centerX = 0.5, double centerY = 0.5, double originX = 0.5, double originY = 0.5)
|
||||||
|
{
|
||||||
|
return new LuaRadialGradientBrush(gradientColors, centerX, centerY, originX, originY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
59
Artemis/Artemis/Profiles/Lua/Brushes/LuaColor.cs
Normal file
59
Artemis/Artemis/Profiles/Lua/Brushes/LuaColor.cs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
using System.Windows.Media;
|
||||||
|
using Artemis.Utilities;
|
||||||
|
using MoonSharp.Interpreter;
|
||||||
|
using MoonSharp.Interpreter.Interop;
|
||||||
|
|
||||||
|
namespace Artemis.Profiles.Lua.Brushes
|
||||||
|
{
|
||||||
|
[MoonSharpUserData]
|
||||||
|
public class LuaColor
|
||||||
|
{
|
||||||
|
public LuaColor(Color color)
|
||||||
|
{
|
||||||
|
Color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LuaColor(string hexCode)
|
||||||
|
{
|
||||||
|
Color = new Color().FromHex(hexCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LuaColor(byte a, byte r, byte g, byte b)
|
||||||
|
{
|
||||||
|
Color = Color.FromArgb(a, r, g, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MoonSharpVisible(false)]
|
||||||
|
public Color Color { get; set; }
|
||||||
|
|
||||||
|
public string HexCode
|
||||||
|
{
|
||||||
|
get { return Color.ToHex(); }
|
||||||
|
set { Color = Color.FromHex(value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte A
|
||||||
|
{
|
||||||
|
get { return Color.A; }
|
||||||
|
set { Color = Color.FromArgb(value, R, G, B); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte R
|
||||||
|
{
|
||||||
|
get { return Color.R; }
|
||||||
|
set { Color = Color.FromArgb(A, value, G, B); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte G
|
||||||
|
{
|
||||||
|
get { return Color.G; }
|
||||||
|
set { Color = Color.FromArgb(A, R, value, B); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte B
|
||||||
|
{
|
||||||
|
get { return Color.B; }
|
||||||
|
set { Color = Color.FromArgb(A, R, G, value); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
using System.Linq;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Artemis.Utilities;
|
|
||||||
using MoonSharp.Interpreter;
|
using MoonSharp.Interpreter;
|
||||||
using MoonSharp.Interpreter.Interop;
|
using MoonSharp.Interpreter.Interop;
|
||||||
|
|
||||||
@ -10,19 +10,16 @@ namespace Artemis.Profiles.Lua.Brushes
|
|||||||
[MoonSharpUserData]
|
[MoonSharpUserData]
|
||||||
public class LuaLinearGradientBrush : LuaBrush
|
public class LuaLinearGradientBrush : LuaBrush
|
||||||
{
|
{
|
||||||
private readonly Script _script;
|
|
||||||
private LinearGradientBrush _brush;
|
private LinearGradientBrush _brush;
|
||||||
|
|
||||||
public LuaLinearGradientBrush(Script script, LinearGradientBrush linearGradientBrush)
|
public LuaLinearGradientBrush(LinearGradientBrush linearGradientBrush)
|
||||||
{
|
{
|
||||||
_script = script;
|
|
||||||
LinearGradientBrush = linearGradientBrush;
|
LinearGradientBrush = linearGradientBrush;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LuaLinearGradientBrush(Script script, Table gradientColors,
|
public LuaLinearGradientBrush(Dictionary<LuaColor, double> gradientColors, double startX, double startY,
|
||||||
double startX, double startY, double endX, double endY)
|
double endX, double endY)
|
||||||
{
|
{
|
||||||
_script = script;
|
|
||||||
SetupBrush(gradientColors, startX, startY, endX, endY);
|
SetupBrush(gradientColors, startX, startY, endX, endY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,13 +41,18 @@ namespace Artemis.Profiles.Lua.Brushes
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the Brush's GradientStops using a LUA table
|
/// Gets or sets the Brush's GradientStops using a LUA table
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Table Colors
|
public Dictionary<LuaColor, double> GradientColors
|
||||||
{
|
{
|
||||||
get { return CreateGradientTable(_script, LinearGradientBrush.GradientStops); }
|
get
|
||||||
|
{
|
||||||
|
return LinearGradientBrush.GradientStops.ToDictionary(gs => new LuaColor(gs.Color), gs => gs.Offset);
|
||||||
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
var updatedBrush = LinearGradientBrush.CloneCurrentValue();
|
var updatedBrush = LinearGradientBrush.CloneCurrentValue();
|
||||||
updatedBrush.GradientStops = CreateGradientCollection(value);
|
updatedBrush.GradientStops = new GradientStopCollection(value
|
||||||
|
.Select(gc => new GradientStop(gc.Key.Color, gc.Value)));
|
||||||
|
|
||||||
LinearGradientBrush = updatedBrush;
|
LinearGradientBrush = updatedBrush;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,45 +65,13 @@ namespace Artemis.Profiles.Lua.Brushes
|
|||||||
/// <param name="startY"></param>
|
/// <param name="startY"></param>
|
||||||
/// <param name="endX"></param>
|
/// <param name="endX"></param>
|
||||||
/// <param name="endY"></param>
|
/// <param name="endY"></param>
|
||||||
private void SetupBrush(Table gradientColors, double startX, double startY, double endX, double endY)
|
private void SetupBrush(Dictionary<LuaColor, double> gradientColors, double startX, double startY, double endX,
|
||||||
|
double endY)
|
||||||
{
|
{
|
||||||
var collection = CreateGradientCollection(gradientColors);
|
var collection = new GradientStopCollection(gradientColors
|
||||||
|
.Select(gc => new GradientStop(gc.Key.Color, gc.Value)));
|
||||||
|
|
||||||
LinearGradientBrush = new LinearGradientBrush(collection, new Point(startX, startY), new Point(endX, endY));
|
LinearGradientBrush = new LinearGradientBrush(collection, new Point(startX, startY), new Point(endX, endY));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Maps a LUA table to a GradientStopsCollection
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="gradientColors"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static GradientStopCollection CreateGradientCollection(Table gradientColors)
|
|
||||||
{
|
|
||||||
var collection = new GradientStopCollection();
|
|
||||||
foreach (var gradientColor in gradientColors.Values)
|
|
||||||
{
|
|
||||||
var pair = gradientColor.Table.Values.ToList();
|
|
||||||
var hexCode = pair[0].String;
|
|
||||||
var position = pair[1].Number;
|
|
||||||
collection.Add(new GradientStop(new Color().FromHex(hexCode), position));
|
|
||||||
}
|
|
||||||
return collection;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Maps the current brush's GradientStopsCollection to a LUA table
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static Table CreateGradientTable(Script script, GradientStopCollection gradientStops)
|
|
||||||
{
|
|
||||||
var table = new Table(script);
|
|
||||||
foreach (var gradientStop in gradientStops)
|
|
||||||
{
|
|
||||||
var inner = new Table(script);
|
|
||||||
inner.Append(DynValue.NewString(gradientStop.Color.ToHex()));
|
|
||||||
inner.Append(DynValue.NewNumber(gradientStop.Offset));
|
|
||||||
table.Append(DynValue.NewTable(inner));
|
|
||||||
}
|
|
||||||
return table;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,4 +1,6 @@
|
|||||||
using System.Windows;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using MoonSharp.Interpreter;
|
using MoonSharp.Interpreter;
|
||||||
using MoonSharp.Interpreter.Interop;
|
using MoonSharp.Interpreter.Interop;
|
||||||
@ -8,19 +10,16 @@ namespace Artemis.Profiles.Lua.Brushes
|
|||||||
[MoonSharpUserData]
|
[MoonSharpUserData]
|
||||||
public class LuaRadialGradientBrush : LuaBrush
|
public class LuaRadialGradientBrush : LuaBrush
|
||||||
{
|
{
|
||||||
private readonly Script _script;
|
|
||||||
private RadialGradientBrush _brush;
|
private RadialGradientBrush _brush;
|
||||||
|
|
||||||
public LuaRadialGradientBrush(Script script, RadialGradientBrush radialGradientBrush)
|
public LuaRadialGradientBrush(RadialGradientBrush radialGradientBrush)
|
||||||
{
|
{
|
||||||
_script = script;
|
|
||||||
RadialGradientBrush = radialGradientBrush;
|
RadialGradientBrush = radialGradientBrush;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LuaRadialGradientBrush(Script script, Table gradientColors,
|
public LuaRadialGradientBrush(Dictionary<LuaColor, double> gradientColors, double centerX,
|
||||||
double centerX, double centerY, double originX, double originY)
|
double centerY, double originX, double originY)
|
||||||
{
|
{
|
||||||
_script = script;
|
|
||||||
SetupBrush(gradientColors, centerX, centerY, originX, originY);
|
SetupBrush(gradientColors, centerX, centerY, originX, originY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,13 +41,18 @@ namespace Artemis.Profiles.Lua.Brushes
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the Brush's GradientStops using a LUA table
|
/// Gets or sets the Brush's GradientStops using a LUA table
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Table Colors
|
public Dictionary<LuaColor, double> GradientColors
|
||||||
{
|
{
|
||||||
get { return LuaLinearGradientBrush.CreateGradientTable(_script, RadialGradientBrush.GradientStops); }
|
get
|
||||||
|
{
|
||||||
|
return RadialGradientBrush.GradientStops.ToDictionary(gs => new LuaColor(gs.Color), gs => gs.Offset);
|
||||||
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
var updatedBrush = RadialGradientBrush.CloneCurrentValue();
|
var updatedBrush = RadialGradientBrush.CloneCurrentValue();
|
||||||
updatedBrush.GradientStops = LuaLinearGradientBrush.CreateGradientCollection(value);
|
updatedBrush.GradientStops = new GradientStopCollection(value
|
||||||
|
.Select(gc => new GradientStop(gc.Key.Color, gc.Value)));
|
||||||
|
|
||||||
RadialGradientBrush = updatedBrush;
|
RadialGradientBrush = updatedBrush;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -61,9 +65,12 @@ namespace Artemis.Profiles.Lua.Brushes
|
|||||||
/// <param name="centerY"></param>
|
/// <param name="centerY"></param>
|
||||||
/// <param name="originX"></param>
|
/// <param name="originX"></param>
|
||||||
/// <param name="originY"></param>
|
/// <param name="originY"></param>
|
||||||
private void SetupBrush(Table gradientColors, double centerX, double centerY, double originX, double originY)
|
private void SetupBrush(Dictionary<LuaColor, double> gradientColors, double centerX, double centerY,
|
||||||
|
double originX, double originY)
|
||||||
{
|
{
|
||||||
var collection = LuaLinearGradientBrush.CreateGradientCollection(gradientColors);
|
var collection = new GradientStopCollection(gradientColors
|
||||||
|
.Select(gc => new GradientStop(gc.Key.Color, gc.Value)));
|
||||||
|
|
||||||
RadialGradientBrush = new RadialGradientBrush(collection)
|
RadialGradientBrush = new RadialGradientBrush(collection)
|
||||||
{
|
{
|
||||||
Center = new Point(centerX, centerY),
|
Center = new Point(centerX, centerY),
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Artemis.Utilities;
|
|
||||||
using MoonSharp.Interpreter;
|
using MoonSharp.Interpreter;
|
||||||
using MoonSharp.Interpreter.Interop;
|
using MoonSharp.Interpreter.Interop;
|
||||||
|
|
||||||
@ -10,21 +9,16 @@ namespace Artemis.Profiles.Lua.Brushes
|
|||||||
{
|
{
|
||||||
private SolidColorBrush _brush;
|
private SolidColorBrush _brush;
|
||||||
|
|
||||||
public LuaSolidColorBrush(SolidColorBrush solidColorBrush)
|
public LuaSolidColorBrush(LuaColor luaColor)
|
||||||
{
|
{
|
||||||
SolidColorBrush = solidColorBrush;
|
SolidColorBrush = new SolidColorBrush(luaColor.Color);
|
||||||
}
|
|
||||||
|
|
||||||
public LuaSolidColorBrush(string hexCode)
|
|
||||||
{
|
|
||||||
SolidColorBrush = new SolidColorBrush(new Color().FromHex(hexCode));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The underlying brush
|
/// The underlying brush
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[MoonSharpVisible(false)]
|
[MoonSharpVisible(false)]
|
||||||
public SolidColorBrush SolidColorBrush
|
public SolidColorBrush SolidColorBrush
|
||||||
{
|
{
|
||||||
get { return _brush; }
|
get { return _brush; }
|
||||||
set
|
set
|
||||||
@ -35,13 +29,10 @@ namespace Artemis.Profiles.Lua.Brushes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
public LuaColor Color
|
||||||
/// Gets or sets the brush's color using a hex notation
|
|
||||||
/// </summary>
|
|
||||||
public string Color
|
|
||||||
{
|
{
|
||||||
get { return SolidColorBrush.Color.ToHex(); }
|
get { return new LuaColor(SolidColorBrush.Color); }
|
||||||
set { SolidColorBrush = new SolidColorBrush(new Color().FromHex(value)); }
|
set { SolidColorBrush = new SolidColorBrush(value.Color); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
117
Artemis/Artemis/Profiles/Lua/Events/LuaEventsWrapper.cs
Normal file
117
Artemis/Artemis/Profiles/Lua/Events/LuaEventsWrapper.cs
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Artemis.Models.Interfaces;
|
||||||
|
using MoonSharp.Interpreter;
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
namespace Artemis.Profiles.Lua.Events
|
||||||
|
{
|
||||||
|
[MoonSharpUserData]
|
||||||
|
public class LuaEventsWrapper
|
||||||
|
{
|
||||||
|
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
||||||
|
public event EventHandler<LuaProfileUpdatingEventArgs> ProfileUpdating;
|
||||||
|
public event EventHandler<LuaProfileDrawingEventArgs> ProfileDrawing;
|
||||||
|
public event EventHandler<LuaKeyPressEventArgs> KeyboardKeyPressed;
|
||||||
|
|
||||||
|
internal void InvokeProfileUpdate(ProfileModel profileModel, IDataModel dataModel, bool preview)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OnProfileUpdating(new LuaProfileWrapper(profileModel),
|
||||||
|
new LuaProfileUpdatingEventArgs(dataModel, preview));
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void InvokeProfileDraw(ProfileModel profileModel, IDataModel dataModel, bool preview, DrawingContext c)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OnProfileDrawing(new LuaProfileWrapper(profileModel),
|
||||||
|
new LuaProfileDrawingEventArgs(dataModel, preview, new LuaDrawWrapper(c)));
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void InvokeKeyPressed(ProfileModel profileModel, LuaKeyboardWrapper keyboard, Keys key, int x, int y)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OnKeyboardKeyPressed(new LuaProfileWrapper(profileModel), keyboard, new LuaKeyPressEventArgs(key, x, y));
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnProfileUpdating(LuaProfileWrapper profileModel, LuaProfileUpdatingEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ProfileUpdating?.Invoke(profileModel, e);
|
||||||
|
}
|
||||||
|
catch (InternalErrorException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
catch (SyntaxErrorException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
catch (ScriptRuntimeException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnProfileDrawing(LuaProfileWrapper profileModel, LuaProfileDrawingEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ProfileDrawing?.Invoke(profileModel, e);
|
||||||
|
}
|
||||||
|
catch (InternalErrorException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
catch (SyntaxErrorException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
catch (ScriptRuntimeException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnKeyboardKeyPressed(LuaProfileWrapper profileModel, LuaKeyboardWrapper keyboard,
|
||||||
|
LuaKeyPressEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
KeyboardKeyPressed?.Invoke(profileModel, e);
|
||||||
|
}
|
||||||
|
catch (InternalErrorException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
catch (SyntaxErrorException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
catch (ScriptRuntimeException ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
23
Artemis/Artemis/Profiles/Lua/Events/LuaKeyPressEventArgs.cs
Normal file
23
Artemis/Artemis/Profiles/Lua/Events/LuaKeyPressEventArgs.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using MoonSharp.Interpreter;
|
||||||
|
|
||||||
|
namespace Artemis.Profiles.Lua.Events
|
||||||
|
{
|
||||||
|
[MoonSharpUserData]
|
||||||
|
public class LuaKeyPressEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
private readonly Keys _key;
|
||||||
|
|
||||||
|
public LuaKeyPressEventArgs(Keys key, int x, int y)
|
||||||
|
{
|
||||||
|
_key = key;
|
||||||
|
X = x;
|
||||||
|
Y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Key => _key.ToString();
|
||||||
|
public int X { get; }
|
||||||
|
public int Y { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using Artemis.Models.Interfaces;
|
||||||
|
using MoonSharp.Interpreter;
|
||||||
|
|
||||||
|
namespace Artemis.Profiles.Lua.Events
|
||||||
|
{
|
||||||
|
[MoonSharpUserData]
|
||||||
|
public class LuaProfileDrawingEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public LuaProfileDrawingEventArgs(IDataModel dataModel, bool preview, LuaDrawWrapper luaDrawWrapper)
|
||||||
|
{
|
||||||
|
DataModel = dataModel;
|
||||||
|
Preview = preview;
|
||||||
|
Drawing = luaDrawWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IDataModel DataModel { get; }
|
||||||
|
public bool Preview { get; }
|
||||||
|
public LuaDrawWrapper Drawing { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
using Artemis.Models.Interfaces;
|
||||||
|
using MoonSharp.Interpreter;
|
||||||
|
|
||||||
|
namespace Artemis.Profiles.Lua.Events
|
||||||
|
{
|
||||||
|
[MoonSharpUserData]
|
||||||
|
public class LuaProfileUpdatingEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public LuaProfileUpdatingEventArgs(IDataModel dataModel, bool preview)
|
||||||
|
{
|
||||||
|
DataModel = dataModel;
|
||||||
|
Preview = preview;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IDataModel DataModel { get; }
|
||||||
|
public bool Preview { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,34 +0,0 @@
|
|||||||
using Artemis.Profiles.Lua.Brushes;
|
|
||||||
using MoonSharp.Interpreter;
|
|
||||||
|
|
||||||
namespace Artemis.Profiles.Lua
|
|
||||||
{
|
|
||||||
[MoonSharpUserData]
|
|
||||||
public class LuaBrushWrapper
|
|
||||||
{
|
|
||||||
private readonly Script _script;
|
|
||||||
|
|
||||||
public LuaBrushWrapper(Script script)
|
|
||||||
{
|
|
||||||
_script = script;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LuaSolidColorBrush GetSolidColorBrush(string hexCode)
|
|
||||||
{
|
|
||||||
return new LuaSolidColorBrush(hexCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LuaLinearGradientBrush GetLinearGradientBrush(Table gradientColors,
|
|
||||||
double startX = 0.5, double startY = 0.0, double endX = 0.5, double endY = 1.0)
|
|
||||||
{
|
|
||||||
return new LuaLinearGradientBrush(_script, gradientColors, startX, startY, endX, endY);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Check default values
|
|
||||||
public LuaRadialGradientBrush GetRadialGradientBrush(Table gradientColors,
|
|
||||||
double centerX = 0.5, double centerY = 0.5, double originX = 0.5, double originY = 0.5)
|
|
||||||
{
|
|
||||||
return new LuaRadialGradientBrush(_script, gradientColors, centerX, centerY, originX, originY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,113 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using Artemis.Models.Interfaces;
|
|
||||||
using MoonSharp.Interpreter;
|
|
||||||
using NLog;
|
|
||||||
|
|
||||||
namespace Artemis.Profiles.Lua
|
|
||||||
{
|
|
||||||
[MoonSharpUserData]
|
|
||||||
public class LuaEventsWrapper
|
|
||||||
{
|
|
||||||
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
|
||||||
public event EventHandler<LuaProfileUpdatingEventArgs> LuaProfileUpdating;
|
|
||||||
public event EventHandler<LuaProfileDrawingEventArgs> LuaProfileDrawing;
|
|
||||||
|
|
||||||
internal void InvokeProfileUpdate(ProfileModel profileModel, IDataModel dataModel, bool preview)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
OnLuaProfileUpdating(new LuaProfileWrapper(profileModel),
|
|
||||||
new LuaProfileUpdatingEventArgs(dataModel, preview));
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void InvokeProfileDraw(ProfileModel profileModel, IDataModel dataModel, bool preview, DrawingContext c)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
OnLuaProfileDrawing(new LuaProfileWrapper(profileModel),
|
|
||||||
new LuaProfileDrawingEventArgs(dataModel, preview, new LuaDrawWrapper(c)));
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected virtual void OnLuaProfileUpdating(LuaProfileWrapper profileModel, LuaProfileUpdatingEventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LuaProfileUpdating?.Invoke(profileModel, e);
|
|
||||||
}
|
|
||||||
catch (InternalErrorException ex)
|
|
||||||
{
|
|
||||||
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
|
||||||
}
|
|
||||||
catch (SyntaxErrorException ex)
|
|
||||||
{
|
|
||||||
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
|
||||||
}
|
|
||||||
catch (ScriptRuntimeException ex)
|
|
||||||
{
|
|
||||||
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void OnLuaProfileDrawing(LuaProfileWrapper profileModel, LuaProfileDrawingEventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LuaProfileDrawing?.Invoke(profileModel, e);
|
|
||||||
}
|
|
||||||
catch (InternalErrorException ex)
|
|
||||||
{
|
|
||||||
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
|
||||||
}
|
|
||||||
catch (SyntaxErrorException ex)
|
|
||||||
{
|
|
||||||
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
|
||||||
}
|
|
||||||
catch (ScriptRuntimeException ex)
|
|
||||||
{
|
|
||||||
_logger.Error(ex, "[{0}-LUA]: Error: {1}", profileModel.Name, ex.DecoratedMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[MoonSharpUserData]
|
|
||||||
public class LuaProfileUpdatingEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
public LuaProfileUpdatingEventArgs(IDataModel dataModel, bool preview)
|
|
||||||
{
|
|
||||||
DataModel = dataModel;
|
|
||||||
Preview = preview;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IDataModel DataModel { get; }
|
|
||||||
public bool Preview { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
[MoonSharpUserData]
|
|
||||||
public class LuaProfileDrawingEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
public LuaProfileDrawingEventArgs(IDataModel dataModel, bool preview, LuaDrawWrapper luaDrawWrapper)
|
|
||||||
{
|
|
||||||
DataModel = dataModel;
|
|
||||||
Preview = preview;
|
|
||||||
Drawing = luaDrawWrapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IDataModel DataModel { get; }
|
|
||||||
public bool Preview { get; }
|
|
||||||
public LuaDrawWrapper Drawing { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
48
Artemis/Artemis/Profiles/Lua/LuaKeyboardWrapper.cs
Normal file
48
Artemis/Artemis/Profiles/Lua/LuaKeyboardWrapper.cs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Artemis.DeviceProviders;
|
||||||
|
using Artemis.Utilities.Keyboard;
|
||||||
|
using MoonSharp.Interpreter;
|
||||||
|
using MoonSharp.Interpreter.Interop;
|
||||||
|
|
||||||
|
namespace Artemis.Profiles.Lua
|
||||||
|
{
|
||||||
|
[MoonSharpUserData]
|
||||||
|
public class LuaKeyboardWrapper : IDisposable
|
||||||
|
{
|
||||||
|
private readonly KeyboardProvider _keyboardProvider;
|
||||||
|
private readonly LuaWrapper _luaWrapper;
|
||||||
|
|
||||||
|
public LuaKeyboardWrapper(LuaWrapper luaWrapper, KeyboardProvider keyboardProvider)
|
||||||
|
{
|
||||||
|
_luaWrapper = luaWrapper;
|
||||||
|
_keyboardProvider = keyboardProvider;
|
||||||
|
|
||||||
|
KeyboardHook.KeyDownCallback += KeyboardHookOnKeyDownCallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name => _keyboardProvider.Name;
|
||||||
|
public string Slug => _keyboardProvider.Slug;
|
||||||
|
public int Width => _keyboardProvider.Width;
|
||||||
|
public int Height => _keyboardProvider.Height;
|
||||||
|
|
||||||
|
[MoonSharpVisible(false)]
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
KeyboardHook.KeyDownCallback -= KeyboardHookOnKeyDownCallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void KeyboardHookOnKeyDownCallback(KeyEventArgs e)
|
||||||
|
{
|
||||||
|
var keyMatch = _keyboardProvider.GetKeyPosition(e.KeyCode);
|
||||||
|
if (keyMatch != null)
|
||||||
|
_luaWrapper.LuaEventsWrapper.InvokeKeyPressed(_luaWrapper.ProfileModel, this,
|
||||||
|
keyMatch.Value.KeyCode, keyMatch.Value.X, keyMatch.Value.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendKeys(string keys)
|
||||||
|
{
|
||||||
|
System.Windows.Forms.SendKeys.SendWait(keys);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,6 +2,9 @@
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Artemis.DAL;
|
using Artemis.DAL;
|
||||||
|
using Artemis.DeviceProviders;
|
||||||
|
using Artemis.Profiles.Lua.Brushes;
|
||||||
|
using Artemis.Profiles.Lua.Events;
|
||||||
using Artemis.Properties;
|
using Artemis.Properties;
|
||||||
using Castle.Core.Internal;
|
using Castle.Core.Internal;
|
||||||
using MoonSharp.Interpreter;
|
using MoonSharp.Interpreter;
|
||||||
@ -9,22 +12,24 @@ using NLog;
|
|||||||
|
|
||||||
namespace Artemis.Profiles.Lua
|
namespace Artemis.Profiles.Lua
|
||||||
{
|
{
|
||||||
public class LuaWrapper
|
public class LuaWrapper : IDisposable
|
||||||
{
|
{
|
||||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
public LuaWrapper(ProfileModel profileModel)
|
public LuaWrapper(ProfileModel profileModel, KeyboardProvider keyboardProvider)
|
||||||
{
|
{
|
||||||
ProfileModel = profileModel;
|
ProfileModel = profileModel;
|
||||||
LuaProfileWrapper = new LuaProfileWrapper(ProfileModel);
|
LuaProfileWrapper = new LuaProfileWrapper(ProfileModel);
|
||||||
LuaBrushWrapper = new LuaBrushWrapper(LuaScript);
|
LuaBrushWrapper = new LuaBrushWrapper();
|
||||||
|
LuaKeyboardWrapper = new LuaKeyboardWrapper(this, keyboardProvider);
|
||||||
SetupLuaScript();
|
SetupLuaScript();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProfileModel ProfileModel { get; set; }
|
public ProfileModel ProfileModel { get; set; }
|
||||||
public LuaEventsWrapper LuaEventsWrapper { get; set; }
|
|
||||||
public LuaBrushWrapper LuaBrushWrapper { get; set; }
|
|
||||||
public LuaProfileWrapper LuaProfileWrapper { get; set; }
|
public LuaProfileWrapper LuaProfileWrapper { get; set; }
|
||||||
|
public LuaBrushWrapper LuaBrushWrapper { get; set; }
|
||||||
|
public LuaKeyboardWrapper LuaKeyboardWrapper { get; set; }
|
||||||
|
public LuaEventsWrapper LuaEventsWrapper { get; set; }
|
||||||
public Script LuaScript { get; set; }
|
public Script LuaScript { get; set; }
|
||||||
|
|
||||||
private void SetupLuaScript()
|
private void SetupLuaScript()
|
||||||
@ -36,6 +41,7 @@ namespace Artemis.Profiles.Lua
|
|||||||
LuaScript.Globals["Profile"] = LuaProfileWrapper;
|
LuaScript.Globals["Profile"] = LuaProfileWrapper;
|
||||||
LuaScript.Globals["Events"] = LuaEventsWrapper;
|
LuaScript.Globals["Events"] = LuaEventsWrapper;
|
||||||
LuaScript.Globals["Brushes"] = LuaBrushWrapper;
|
LuaScript.Globals["Brushes"] = LuaBrushWrapper;
|
||||||
|
LuaScript.Globals["Keyboard"] = LuaKeyboardWrapper;
|
||||||
|
|
||||||
if (ProfileModel.LuaScript.IsNullOrEmpty())
|
if (ProfileModel.LuaScript.IsNullOrEmpty())
|
||||||
return;
|
return;
|
||||||
@ -121,5 +127,13 @@ namespace Artemis.Profiles.Lua
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
LuaKeyboardWrapper.Dispose();
|
||||||
|
LuaScript.Globals.Clear();
|
||||||
|
LuaScript.Registry.Clear();
|
||||||
|
LuaScript = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -11,7 +11,6 @@ using Artemis.Profiles.Layers.Models;
|
|||||||
using Artemis.Profiles.Lua;
|
using Artemis.Profiles.Lua;
|
||||||
using Artemis.Utilities;
|
using Artemis.Utilities;
|
||||||
using Artemis.Utilities.ParentChild;
|
using Artemis.Utilities.ParentChild;
|
||||||
using Castle.Core.Internal;
|
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Color = System.Windows.Media.Color;
|
using Color = System.Windows.Media.Color;
|
||||||
using Point = System.Windows.Point;
|
using Point = System.Windows.Point;
|
||||||
@ -104,11 +103,8 @@ namespace Artemis.Profiles
|
|||||||
/// <param name="preview">Indicates wheter the layer is drawn as a preview, ignoring dynamic properties</param>
|
/// <param name="preview">Indicates wheter the layer is drawn as a preview, ignoring dynamic properties</param>
|
||||||
/// <param name="updateAnimations">Wheter or not to update the layer's animations</param>
|
/// <param name="updateAnimations">Wheter or not to update the layer's animations</param>
|
||||||
internal void DrawLayers(Graphics g, IEnumerable<LayerModel> renderLayers, IDataModel dataModel, Rect rect,
|
internal void DrawLayers(Graphics g, IEnumerable<LayerModel> renderLayers, IDataModel dataModel, Rect rect,
|
||||||
bool preview, bool updateAnimations)
|
bool preview, bool updateAnimations, bool triggerLua = false)
|
||||||
{
|
{
|
||||||
if (LuaWrapper == null && !LuaScript.IsNullOrEmpty())
|
|
||||||
LuaWrapper = new LuaWrapper(this);
|
|
||||||
|
|
||||||
var visual = new DrawingVisual();
|
var visual = new DrawingVisual();
|
||||||
var layerModels = renderLayers.ToList();
|
var layerModels = renderLayers.ToList();
|
||||||
using (var c = visual.RenderOpen())
|
using (var c = visual.RenderOpen())
|
||||||
@ -120,12 +116,16 @@ namespace Artemis.Profiles
|
|||||||
// Update the layers
|
// Update the layers
|
||||||
foreach (var layerModel in layerModels)
|
foreach (var layerModel in layerModels)
|
||||||
layerModel.Update(dataModel, preview, updateAnimations);
|
layerModel.Update(dataModel, preview, updateAnimations);
|
||||||
LuaWrapper?.LuaEventsWrapper?.InvokeProfileUpdate(this, dataModel, preview);
|
|
||||||
|
if (triggerLua)
|
||||||
|
LuaWrapper?.LuaEventsWrapper?.InvokeProfileUpdate(this, dataModel, preview);
|
||||||
|
|
||||||
// Draw the layers
|
// Draw the layers
|
||||||
foreach (var layerModel in layerModels)
|
foreach (var layerModel in layerModels)
|
||||||
layerModel.Draw(dataModel, c, preview, updateAnimations);
|
layerModel.Draw(dataModel, c, preview, updateAnimations);
|
||||||
LuaWrapper?.LuaEventsWrapper?.InvokeProfileDraw(this, dataModel, preview, c);
|
|
||||||
|
if (triggerLua)
|
||||||
|
LuaWrapper?.LuaEventsWrapper?.InvokeProfileDraw(this, dataModel, preview, c);
|
||||||
|
|
||||||
// Remove the clip
|
// Remove the clip
|
||||||
c.Pop();
|
c.Pop();
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
-- For docs and examples, see wiki: https://github.com/SpoinkyNL/Artemis/wiki/LUA
|
-- For docs and examples, see wiki: https://github.com/SpoinkyNL/Artemis/wiki/LUA
|
||||||
|
|
||||||
-- Note: You are editing a temporary file. Whenever you save this file the
|
-- Note: You are editing a temporary file. Whenever you save this file the
|
||||||
-- changes are applied to the profile and the script restarted.
|
-- changes are applied to the profile and the script is restarted.
|
||||||
|
|
||||||
-- This event is raised after every profile update, before drawing.
|
-- This event is raised after every profile update, before drawing.
|
||||||
function updateHandler(profile, eventArgs)
|
function updateHandler(profile, eventArgs)
|
||||||
@ -36,5 +36,5 @@ end
|
|||||||
|
|
||||||
-- Register the default events, you can rename/remove these if you so desire.
|
-- Register the default events, you can rename/remove these if you so desire.
|
||||||
-- These events are raised every 40 ms (25 times a second).
|
-- These events are raised every 40 ms (25 times a second).
|
||||||
Events.LuaProfileUpdating.add(updateHandler);
|
Events.ProfileUpdating.add(updateHandler);
|
||||||
Events.LuaProfileDrawing.add(drawHandler);
|
Events.ProfileDrawing.add(drawHandler);
|
||||||
@ -91,6 +91,7 @@ namespace Artemis.ViewModels.Abstract
|
|||||||
{
|
{
|
||||||
if (e.PropertyName != "SelectedProfile" && IsActive)
|
if (e.PropertyName != "SelectedProfile" && IsActive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GameModel.Profile = ProfileEditor.SelectedProfile;
|
GameModel.Profile = ProfileEditor.SelectedProfile;
|
||||||
ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile;
|
ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile;
|
||||||
|
|
||||||
|
|||||||
@ -125,6 +125,11 @@ namespace Artemis.ViewModels.Profiles
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (Equals(value, _selectedProfile)) return;
|
if (Equals(value, _selectedProfile)) return;
|
||||||
|
if (_selectedProfile?.LuaWrapper != null)
|
||||||
|
{
|
||||||
|
_selectedProfile.LuaWrapper.Dispose();
|
||||||
|
_selectedProfile.LuaWrapper = null;
|
||||||
|
}
|
||||||
_selectedProfile = value;
|
_selectedProfile = value;
|
||||||
NotifyOfPropertyChange(() => SelectedProfile);
|
NotifyOfPropertyChange(() => SelectedProfile);
|
||||||
}
|
}
|
||||||
@ -232,8 +237,11 @@ namespace Artemis.ViewModels.Profiles
|
|||||||
public void Deactivate()
|
public void Deactivate()
|
||||||
{
|
{
|
||||||
ProfileViewModel.Deactivate();
|
ProfileViewModel.Deactivate();
|
||||||
if (SelectedProfile != null)
|
if (SelectedProfile?.LuaWrapper != null)
|
||||||
|
{
|
||||||
|
SelectedProfile.LuaWrapper.Dispose();
|
||||||
SelectedProfile.LuaWrapper = null;
|
SelectedProfile.LuaWrapper = null;
|
||||||
|
}
|
||||||
_saveTimer.Stop();
|
_saveTimer.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -537,8 +545,8 @@ namespace Artemis.ViewModels.Profiles
|
|||||||
|
|
||||||
ProfileProvider.AddOrUpdate(profile);
|
ProfileProvider.AddOrUpdate(profile);
|
||||||
|
|
||||||
|
LastProfile = profile.Name;
|
||||||
LoadProfiles();
|
LoadProfiles();
|
||||||
SelectedProfile = profile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void RenameProfile()
|
public async void RenameProfile()
|
||||||
@ -564,9 +572,9 @@ namespace Artemis.ViewModels.Profiles
|
|||||||
}
|
}
|
||||||
|
|
||||||
var profile = SelectedProfile;
|
var profile = SelectedProfile;
|
||||||
SelectedProfile = null;
|
|
||||||
ProfileProvider.RenameProfile(profile, name);
|
ProfileProvider.RenameProfile(profile, name);
|
||||||
|
|
||||||
|
SelectedProfile = null;
|
||||||
LastProfile = name;
|
LastProfile = name;
|
||||||
LoadProfiles();
|
LoadProfiles();
|
||||||
}
|
}
|
||||||
@ -597,8 +605,8 @@ namespace Artemis.ViewModels.Profiles
|
|||||||
|
|
||||||
newProfile.IsDefault = false;
|
newProfile.IsDefault = false;
|
||||||
ProfileProvider.AddOrUpdate(newProfile);
|
ProfileProvider.AddOrUpdate(newProfile);
|
||||||
|
LastProfile = newProfile.Name;
|
||||||
LoadProfiles();
|
LoadProfiles();
|
||||||
SelectedProfile = newProfile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void DeleteProfile()
|
public async void DeleteProfile()
|
||||||
@ -682,9 +690,8 @@ namespace Artemis.ViewModels.Profiles
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProfileProvider.AddOrUpdate(profile);
|
ProfileProvider.AddOrUpdate(profile);
|
||||||
|
LastProfile = profile.Name;
|
||||||
LoadProfiles();
|
LoadProfiles();
|
||||||
|
|
||||||
SelectedProfile = profile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExportProfile()
|
public void ExportProfile()
|
||||||
@ -707,7 +714,8 @@ namespace Artemis.ViewModels.Profiles
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (SelectedProfile.LuaWrapper == null)
|
if (SelectedProfile.LuaWrapper == null)
|
||||||
SelectedProfile.LuaWrapper = new LuaWrapper(SelectedProfile);
|
SelectedProfile.LuaWrapper = new LuaWrapper(SelectedProfile,
|
||||||
|
_mainManager.DeviceManager.ActiveKeyboard);
|
||||||
|
|
||||||
SelectedProfile.LuaWrapper.OpenEditor();
|
SelectedProfile.LuaWrapper.OpenEditor();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -179,6 +179,9 @@ namespace Artemis.ViewModels
|
|||||||
|
|
||||||
NotifyOfPropertyChange(() => CanShowWindow);
|
NotifyOfPropertyChange(() => CanShowWindow);
|
||||||
NotifyOfPropertyChange(() => CanHideWindow);
|
NotifyOfPropertyChange(() => CanHideWindow);
|
||||||
|
|
||||||
|
// Force a GC since the UI releases a lot of resources
|
||||||
|
GC.Collect();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExitApplication()
|
public void ExitApplication()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user