mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Implemented conditions logic
This commit is contained in:
parent
fa30bd657b
commit
2cb8cac90d
@ -253,9 +253,6 @@
|
|||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="ArtemisBootstrapper.cs" />
|
<Compile Include="ArtemisBootstrapper.cs" />
|
||||||
<Compile Include="Components\Abstract\LayerComponent.cs" />
|
|
||||||
<Compile Include="Components\Layer.cs" />
|
|
||||||
<Compile Include="Components\LayerComposite.cs" />
|
|
||||||
<Compile Include="DAL\ProfileProvider.cs" />
|
<Compile Include="DAL\ProfileProvider.cs" />
|
||||||
<Compile Include="Events\ToggleEnabled.cs" />
|
<Compile Include="Events\ToggleEnabled.cs" />
|
||||||
<Compile Include="Events\ActiveEffectChanged.cs" />
|
<Compile Include="Events\ActiveEffectChanged.cs" />
|
||||||
@ -278,8 +275,11 @@
|
|||||||
<Compile Include="Models\EffectSettings.cs" />
|
<Compile Include="Models\EffectSettings.cs" />
|
||||||
<Compile Include="Models\GameSettings.cs" />
|
<Compile Include="Models\GameSettings.cs" />
|
||||||
<Compile Include="Models\Interfaces\IGameDataModel.cs" />
|
<Compile Include="Models\Interfaces\IGameDataModel.cs" />
|
||||||
<Compile Include="Models\LayerConditionModel.cs" />
|
<Compile Include="Models\Profiles\LayerConditionModel.cs" />
|
||||||
<Compile Include="Models\ProfileModel.cs" />
|
<Compile Include="Models\Profiles\LayerModel.cs" />
|
||||||
|
<Compile Include="Models\Profiles\LayerDynamicPropertiesModel.cs" />
|
||||||
|
<Compile Include="Models\Profiles\LayerPropertiesModel.cs" />
|
||||||
|
<Compile Include="Models\Profiles\ProfileModel.cs" />
|
||||||
<Compile Include="Modules\Effects\AmbientLightning\AmbientLightningEffectModel.cs" />
|
<Compile Include="Modules\Effects\AmbientLightning\AmbientLightningEffectModel.cs" />
|
||||||
<Compile Include="Modules\Effects\AmbientLightning\AmbientLightningEffectSettings.cs" />
|
<Compile Include="Modules\Effects\AmbientLightning\AmbientLightningEffectSettings.cs" />
|
||||||
<Compile Include="Modules\Effects\AmbientLightning\AmbientLightningEffectView.xaml.cs">
|
<Compile Include="Modules\Effects\AmbientLightning\AmbientLightningEffectView.xaml.cs">
|
||||||
@ -324,6 +324,7 @@
|
|||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Modules\Games\RocketLeague\RocketLeagueDataModel.cs" />
|
||||||
<Compile Include="Modules\Games\RocketLeague\RocketLeagueModel.cs" />
|
<Compile Include="Modules\Games\RocketLeague\RocketLeagueModel.cs" />
|
||||||
<Compile Include="Modules\Games\TheDivision\TheDivision.Designer.cs">
|
<Compile Include="Modules\Games\TheDivision\TheDivision.Designer.cs">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
@ -519,6 +520,7 @@
|
|||||||
<Resource Include="Resources\logo-disabled.ico" />
|
<Resource Include="Resources\logo-disabled.ico" />
|
||||||
<Resource Include="Resources\Dota2\dotaGamestateConfiguration.txt" />
|
<Resource Include="Resources\Dota2\dotaGamestateConfiguration.txt" />
|
||||||
<None Include="Resources\LogitechLED.dll" />
|
<None Include="Resources\LogitechLED.dll" />
|
||||||
|
<None Include="Resources\folder.png" />
|
||||||
<Content Include="Resources\Witcher3\playerWitcher.txt" />
|
<Content Include="Resources\Witcher3\playerWitcher.txt" />
|
||||||
<Content Include="Resources\Witcher3\artemis.txt" />
|
<Content Include="Resources\Witcher3\artemis.txt" />
|
||||||
<Resource Include="Resources\Entypo.ttf" />
|
<Resource Include="Resources\Entypo.ttf" />
|
||||||
|
|||||||
@ -1,21 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Linq;
|
|
||||||
using Artemis.Models;
|
|
||||||
using Artemis.Models.Interfaces;
|
|
||||||
|
|
||||||
namespace Artemis.Components.Abstract
|
|
||||||
{
|
|
||||||
public abstract class LayerComponent
|
|
||||||
{
|
|
||||||
public string Name { get; set; }
|
|
||||||
public List<LayerConditionModel> ConditionModels { get; set; }
|
|
||||||
|
|
||||||
public bool ConditionsMet(IGameDataModel dataModel)
|
|
||||||
{
|
|
||||||
return ConditionModels.All(cm => cm.ConditionMet(dataModel));
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract void Draw(Graphics g);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
using System.Drawing;
|
|
||||||
using Artemis.Components.Abstract;
|
|
||||||
|
|
||||||
namespace Artemis.Components
|
|
||||||
{
|
|
||||||
public class Layer : LayerComponent
|
|
||||||
{
|
|
||||||
public override void Draw(Graphics g)
|
|
||||||
{
|
|
||||||
// Read properties and draw accordingly
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Drawing;
|
|
||||||
using Artemis.Components.Abstract;
|
|
||||||
|
|
||||||
namespace Artemis.Components
|
|
||||||
{
|
|
||||||
public class LayerComposite : LayerComponent
|
|
||||||
{
|
|
||||||
public List<LayerComponent> LayerComponents { get; set; }
|
|
||||||
|
|
||||||
public override void Draw(Graphics g)
|
|
||||||
{
|
|
||||||
foreach (var layerComponent in LayerComponents)
|
|
||||||
layerComponent.Draw(g);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -4,6 +4,7 @@ using System.Diagnostics;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Artemis.Models;
|
using Artemis.Models;
|
||||||
|
using Artemis.Models.Profiles;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace Artemis.DAL
|
namespace Artemis.DAL
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows.Forms;
|
|
||||||
using Artemis.Events;
|
using Artemis.Events;
|
||||||
using Artemis.Models;
|
using Artemis.Models;
|
||||||
using Artemis.Services;
|
using Artemis.Services;
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq.Dynamic;
|
using System.Linq.Dynamic;
|
||||||
|
using Artemis.Models.Interfaces;
|
||||||
|
|
||||||
namespace Artemis.Models
|
namespace Artemis.Models.Profiles
|
||||||
{
|
{
|
||||||
public class LayerConditionModel
|
public class LayerConditionModel
|
||||||
{
|
{
|
||||||
@ -9,11 +10,11 @@ namespace Artemis.Models
|
|||||||
public string Value { get; set; }
|
public string Value { get; set; }
|
||||||
public string Operator { get; set; }
|
public string Operator { get; set; }
|
||||||
|
|
||||||
public bool ConditionMet(object subject)
|
public bool ConditionMet<T>(IGameDataModel subject)
|
||||||
{
|
{
|
||||||
// Put the subject in a list, allowing Dynamic Linq to be used.
|
// Put the subject in a list, allowing Dynamic Linq to be used.
|
||||||
var subjectList = new List<object> {subject};
|
var subjectList = new List<T> {(T) subject};
|
||||||
var res = subjectList.Where($"s => s.{Field} {Operator} {Value}").Any();
|
var res = subjectList.Where($"{Field} {Operator} {Value}").Any();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,86 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq.Dynamic;
|
||||||
|
using System.Reflection;
|
||||||
|
using Artemis.Models.Interfaces;
|
||||||
|
|
||||||
|
namespace Artemis.Models.Profiles
|
||||||
|
{
|
||||||
|
public class LayerDynamicPropertiesModel
|
||||||
|
{
|
||||||
|
public string LayerProperty { get; set; }
|
||||||
|
public string GameProperty { get; set; }
|
||||||
|
public string RequiredOperator { get; set; }
|
||||||
|
public string RequiredValue { get; set; }
|
||||||
|
public LayerPopertyType LayerPopertyType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Only used when LayerPropertyType is PercentageOf or PercentageOfProperty
|
||||||
|
/// </summary>
|
||||||
|
public string PercentageSource { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Only used when LayerPropertyType is Color
|
||||||
|
/// </summary>
|
||||||
|
public List<Color> LayerColors { get; set; }
|
||||||
|
|
||||||
|
internal void ApplyProperty<T>(IGameDataModel dataModel, LayerPropertiesModel userProps,
|
||||||
|
LayerPropertiesModel props)
|
||||||
|
{
|
||||||
|
var dataList = new List<T> {(T) dataModel};
|
||||||
|
|
||||||
|
// Attempt to set the property
|
||||||
|
var layerProp = props.GetType().GetProperty(LayerProperty);
|
||||||
|
var layerUserProp = userProps.GetType().GetProperty(LayerProperty);
|
||||||
|
|
||||||
|
if (LayerPopertyType == LayerPopertyType.PercentageOf)
|
||||||
|
SetPercentageOf(props, userProps, dataModel, int.Parse(PercentageSource));
|
||||||
|
if (LayerPopertyType == LayerPopertyType.PercentageOfProperty)
|
||||||
|
SetPercentageOfProperty(props, userProps, dataModel);
|
||||||
|
if (LayerPopertyType == LayerPopertyType.Color)
|
||||||
|
{
|
||||||
|
if (dataList.Where($"{GameProperty} {RequiredOperator} {RequiredValue}").Any())
|
||||||
|
SetColor(layerProp, dataModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetPercentageOf(LayerPropertiesModel props, LayerPropertiesModel userProps,
|
||||||
|
IGameDataModel dataModel, int percentageSource)
|
||||||
|
{
|
||||||
|
// Property that will be set
|
||||||
|
var layerProp = props.GetType().GetProperty(LayerProperty);
|
||||||
|
// Property to use as a 100%
|
||||||
|
var userProp = userProps.GetType().GetProperty(LayerProperty);
|
||||||
|
// Value to use as a source
|
||||||
|
var source = dataModel.GetType().GetProperty(GameProperty)?.GetValue(dataModel, null);
|
||||||
|
if (layerProp == null || userProp == null || source == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var percentage = double.Parse(source.ToString())/percentageSource;
|
||||||
|
layerProp.SetValue(props, (int) (percentage*(int) userProp.GetValue(userProps, null)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetPercentageOfProperty(LayerPropertiesModel props, LayerPropertiesModel userProps,
|
||||||
|
IGameDataModel dataModel)
|
||||||
|
{
|
||||||
|
var value = dataModel.GetType().GetProperty(PercentageSource)?.GetValue(dataModel, null);
|
||||||
|
if (value != null)
|
||||||
|
SetPercentageOf(props, userProps, dataModel, (int) value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetColor(PropertyInfo layerProp, IGameDataModel dataModel)
|
||||||
|
{
|
||||||
|
if (layerProp == null)
|
||||||
|
return;
|
||||||
|
if (layerProp.PropertyType == typeof (List<Color>))
|
||||||
|
layerProp.SetValue(dataModel, LayerColors, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum LayerPopertyType
|
||||||
|
{
|
||||||
|
PercentageOf,
|
||||||
|
PercentageOfProperty,
|
||||||
|
Color
|
||||||
|
}
|
||||||
|
}
|
||||||
135
Artemis/Artemis/Models/Profiles/LayerModel.cs
Normal file
135
Artemis/Artemis/Models/Profiles/LayerModel.cs
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using Artemis.Models.Interfaces;
|
||||||
|
using Artemis.Properties;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Color = System.Drawing.Color;
|
||||||
|
using Pen = System.Drawing.Pen;
|
||||||
|
|
||||||
|
namespace Artemis.Models.Profiles
|
||||||
|
{
|
||||||
|
public class LayerModel
|
||||||
|
{
|
||||||
|
public LayerModel(string name, LayerType layerType)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
LayerType = layerType;
|
||||||
|
LayerUserProperties = new LayerPropertiesModel();
|
||||||
|
LayerCalculatedProperties = new LayerPropertiesModel();
|
||||||
|
|
||||||
|
Children = new List<LayerModel>();
|
||||||
|
LayerConditions = new List<LayerConditionModel>();
|
||||||
|
LayerProperties = new List<LayerDynamicPropertiesModel>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public LayerType LayerType { get; set; }
|
||||||
|
public LayerPropertiesModel LayerUserProperties { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public LayerPropertiesModel LayerCalculatedProperties { get; }
|
||||||
|
|
||||||
|
public List<LayerModel> Children { get; set; }
|
||||||
|
public List<LayerConditionModel> LayerConditions { get; set; }
|
||||||
|
public List<LayerDynamicPropertiesModel> LayerProperties { get; set; }
|
||||||
|
public ImageSource LayerImage => GetPreviewImage();
|
||||||
|
|
||||||
|
private BitmapImage GetPreviewImage()
|
||||||
|
{
|
||||||
|
var bitmap = new Bitmap(18, 18);
|
||||||
|
using (var g = Graphics.FromImage(bitmap))
|
||||||
|
{
|
||||||
|
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||||
|
if (LayerType == LayerType.Ellipse)
|
||||||
|
{
|
||||||
|
g.FillEllipse(new SolidBrush(LayerUserProperties.Colors.FirstOrDefault()), 0, 0, 18, 18);
|
||||||
|
g.DrawEllipse(new Pen(Color.Black, 1), 0, 0, 17, 17);
|
||||||
|
}
|
||||||
|
else if (LayerType == LayerType.Rectangle)
|
||||||
|
{
|
||||||
|
g.FillRectangle(new SolidBrush(LayerUserProperties.Colors.FirstOrDefault()), 0, 0, 18, 18);
|
||||||
|
g.DrawRectangle(new Pen(Color.Black, 1), 0, 0, 17, 17);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bitmap = Resources.folder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
using (var memory = new MemoryStream())
|
||||||
|
{
|
||||||
|
bitmap.Save(memory, ImageFormat.Png);
|
||||||
|
memory.Position = 0;
|
||||||
|
|
||||||
|
var bitmapImage = new BitmapImage();
|
||||||
|
bitmapImage.BeginInit();
|
||||||
|
bitmapImage.StreamSource = memory;
|
||||||
|
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
|
||||||
|
bitmapImage.EndInit();
|
||||||
|
|
||||||
|
return bitmapImage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ConditionsMet<T>(IGameDataModel dataModel)
|
||||||
|
{
|
||||||
|
return LayerConditions.All(cm => cm.ConditionMet<T>(dataModel));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Draw<T>(IGameDataModel dataModel, Graphics g)
|
||||||
|
{
|
||||||
|
if (!ConditionsMet<T>(dataModel))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Update<T>(dataModel);
|
||||||
|
switch (LayerType)
|
||||||
|
{
|
||||||
|
case LayerType.Folder:
|
||||||
|
DrawChildren<T>(dataModel, g);
|
||||||
|
break;
|
||||||
|
case LayerType.Rectangle:
|
||||||
|
DrawRectangle(g);
|
||||||
|
break;
|
||||||
|
case LayerType.Ellipse:
|
||||||
|
DrawEllipse(g);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Update<T>(IGameDataModel dataModel)
|
||||||
|
{
|
||||||
|
foreach (var dynamicProperty in LayerProperties)
|
||||||
|
dynamicProperty.ApplyProperty<T>(dataModel, LayerUserProperties, LayerCalculatedProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawChildren<T>(IGameDataModel dataModel, Graphics g)
|
||||||
|
{
|
||||||
|
foreach (var layerModel in Children)
|
||||||
|
layerModel.Draw<T>(dataModel, g);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawRectangle(Graphics g)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawEllipse(Graphics g)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum LayerType
|
||||||
|
{
|
||||||
|
Folder,
|
||||||
|
Rectangle,
|
||||||
|
Ellipse
|
||||||
|
}
|
||||||
|
}
|
||||||
25
Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs
Normal file
25
Artemis/Artemis/Models/Profiles/LayerPropertiesModel.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
|
||||||
|
namespace Artemis.Models.Profiles
|
||||||
|
{
|
||||||
|
public class LayerPropertiesModel
|
||||||
|
{
|
||||||
|
public int X { get; set; }
|
||||||
|
public int Y { get; set; }
|
||||||
|
public int Width { get; set; }
|
||||||
|
public int Height { get; set; }
|
||||||
|
public int Opacity { get; set; }
|
||||||
|
public bool ContainedBrush { get; set; }
|
||||||
|
public LinearGradientMode GradientMode { get; set; }
|
||||||
|
public bool Rotate { get; set; }
|
||||||
|
public double RotateSpeed { get; set; }
|
||||||
|
public List<Color> Colors { get; set; }
|
||||||
|
|
||||||
|
public LayerPropertiesModel()
|
||||||
|
{
|
||||||
|
Colors = new List<Color>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,7 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Artemis.Components;
|
|
||||||
|
|
||||||
namespace Artemis.Models
|
namespace Artemis.Models.Profiles
|
||||||
{
|
{
|
||||||
public class ProfileModel
|
public class ProfileModel
|
||||||
{
|
{
|
||||||
@ -16,7 +15,7 @@ namespace Artemis.Models
|
|||||||
public string KeyboardName { get; set; }
|
public string KeyboardName { get; set; }
|
||||||
public string GameName { get; set; }
|
public string GameName { get; set; }
|
||||||
|
|
||||||
public LayerComposite Layers { get; set; }
|
public List<LayerModel> Layers { get; set; }
|
||||||
|
|
||||||
protected bool Equals(ProfileModel other)
|
protected bool Equals(ProfileModel other)
|
||||||
{
|
{
|
||||||
@ -27,7 +26,7 @@ namespace Artemis.Models
|
|||||||
{
|
{
|
||||||
if (ReferenceEquals(null, obj)) return false;
|
if (ReferenceEquals(null, obj)) return false;
|
||||||
if (ReferenceEquals(this, obj)) return true;
|
if (ReferenceEquals(this, obj)) return true;
|
||||||
if (obj.GetType() != this.GetType()) return false;
|
if (obj.GetType() != GetType()) return false;
|
||||||
return Equals((ProfileModel) obj);
|
return Equals((ProfileModel) obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,9 +34,9 @@ namespace Artemis.Models
|
|||||||
{
|
{
|
||||||
unchecked
|
unchecked
|
||||||
{
|
{
|
||||||
var hashCode = (Name != null ? Name.GetHashCode() : 0);
|
var hashCode = Name?.GetHashCode() ?? 0;
|
||||||
hashCode = (hashCode*397) ^ (KeyboardName != null ? KeyboardName.GetHashCode() : 0);
|
hashCode = (hashCode*397) ^ (KeyboardName?.GetHashCode() ?? 0);
|
||||||
hashCode = (hashCode*397) ^ (GameName != null ? GameName.GetHashCode() : 0);
|
hashCode = (hashCode*397) ^ (GameName?.GetHashCode() ?? 0);
|
||||||
return hashCode;
|
return hashCode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
using Artemis.Models.Interfaces;
|
||||||
|
|
||||||
|
namespace Artemis.Modules.Games.RocketLeague
|
||||||
|
{
|
||||||
|
internal class RocketLeagueDataModel : IGameDataModel
|
||||||
|
{
|
||||||
|
public int Boost { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Artemis/Artemis/Properties/Resources.Designer.cs
generated
12
Artemis/Artemis/Properties/Resources.Designer.cs
generated
@ -116,7 +116,7 @@ namespace Artemis.Properties {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to "Artemis"
|
/// Looks up a localized string similar to "Artemis"
|
||||||
///{
|
///{
|
||||||
/// "uri" "http://localhost:4000/"
|
/// "uri" "http://localhost:{{port}}/"
|
||||||
/// "timeout" "5.0"
|
/// "timeout" "5.0"
|
||||||
/// "buffer" "0.1"
|
/// "buffer" "0.1"
|
||||||
/// "throttle" "0.1"
|
/// "throttle" "0.1"
|
||||||
@ -138,6 +138,16 @@ namespace Artemis.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap folder {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("folder", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Byte[].
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -142,4 +142,7 @@
|
|||||||
<data name="playerWitcherWs" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="playerWitcherWs" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\resources\witcher3\playerwitcher.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
|
<value>..\resources\witcher3\playerwitcher.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
BIN
Artemis/Artemis/Resources/folder.png
Normal file
BIN
Artemis/Artemis/Resources/folder.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
@ -1,9 +1,16 @@
|
|||||||
using System.Linq;
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Linq;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Artemis.DAL;
|
using Artemis.DAL;
|
||||||
using Artemis.Managers;
|
using Artemis.Managers;
|
||||||
using Artemis.Models;
|
using Artemis.Models;
|
||||||
|
using Artemis.Models.Profiles;
|
||||||
|
using Artemis.Modules.Games.RocketLeague;
|
||||||
|
using Artemis.Modules.Games.TheDivision;
|
||||||
using Caliburn.Micro;
|
using Caliburn.Micro;
|
||||||
|
using Color = System.Drawing.Color;
|
||||||
|
|
||||||
namespace Artemis.ViewModels
|
namespace Artemis.ViewModels
|
||||||
{
|
{
|
||||||
@ -65,8 +72,7 @@ namespace Artemis.ViewModels
|
|||||||
}
|
}
|
||||||
|
|
||||||
var profile = new ProfileModel(name, _mainManager.KeyboardManager.ActiveKeyboard.Name, _gameModel.Name);
|
var profile = new ProfileModel(name, _mainManager.KeyboardManager.ActiveKeyboard.Name, _gameModel.Name);
|
||||||
var test = ProfileProvider.GetAll();
|
if (ProfileProvider.GetAll().Contains(profile))
|
||||||
if (test.Contains(profile))
|
|
||||||
{
|
{
|
||||||
var overwrite =
|
var overwrite =
|
||||||
await
|
await
|
||||||
@ -76,6 +82,44 @@ namespace Artemis.ViewModels
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test
|
||||||
|
profile.Layers = new List<LayerModel>();
|
||||||
|
var layerFolder = new LayerModel("[VM TEST] Folder 1", LayerType.Folder);
|
||||||
|
|
||||||
|
var layer1 = new LayerModel("[VM TEST] Rectangle 1", LayerType.Rectangle);
|
||||||
|
layer1.LayerConditions.Add(new LayerConditionModel {Field = "Boost", Operator = ">", Value = "0"});
|
||||||
|
layer1.LayerProperties.Add(new LayerDynamicPropertiesModel
|
||||||
|
{
|
||||||
|
LayerProperty = "Width",
|
||||||
|
LayerPopertyType = LayerPopertyType.PercentageOf,
|
||||||
|
GameProperty = "Boost",
|
||||||
|
PercentageSource = "100"
|
||||||
|
});
|
||||||
|
layer1.LayerUserProperties = new LayerPropertiesModel
|
||||||
|
{
|
||||||
|
Colors = new List<Color> {Color.Red, Color.OrangeRed},
|
||||||
|
ContainedBrush = true,
|
||||||
|
GradientMode = LinearGradientMode.Vertical,
|
||||||
|
Width = 21,
|
||||||
|
Height = 7,
|
||||||
|
Opacity = 100,
|
||||||
|
Rotate = true,
|
||||||
|
RotateSpeed = 1,
|
||||||
|
X = 0,
|
||||||
|
Y = 0
|
||||||
|
};
|
||||||
|
layerFolder.Children.Add(layer1);
|
||||||
|
layerFolder.Children.Add(new LayerModel("[VM TEST] Ellipse 1", LayerType.Ellipse));
|
||||||
|
|
||||||
|
var testData = new RocketLeagueDataModel {Boost = 20};
|
||||||
|
var bitmap = _mainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(4);
|
||||||
|
using (var g = Graphics.FromImage(bitmap))
|
||||||
|
{
|
||||||
|
layerFolder.Draw<RocketLeagueDataModel>(testData, g);
|
||||||
|
}
|
||||||
|
// End test
|
||||||
|
|
||||||
|
profile.Layers.Add(layerFolder);
|
||||||
ProfileProvider.AddOrUpdate(profile);
|
ProfileProvider.AddOrUpdate(profile);
|
||||||
|
|
||||||
LoadProfiles();
|
LoadProfiles();
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
<!-- Preview -->
|
<!-- Preview -->
|
||||||
<Label Grid.Column="0" Grid.Row="0" FontSize="20" HorizontalAlignment="Left" Content="Preview" />
|
<Label Grid.Column="0" Grid.Row="0" FontSize="20" HorizontalAlignment="Left" Content="Preview" />
|
||||||
<Border Grid.Column="0" Grid.Row="1" Background="#FF232323" BorderBrush="{DynamicResource HighlightBrush}"
|
<Border Grid.Column="0" Grid.Row="1" Background="#FF232323" BorderBrush="{DynamicResource HighlightBrush}"
|
||||||
BorderThickness="3" Width="800" Height="400">
|
BorderThickness="3" Width="750" Height="400">
|
||||||
<Border>
|
<Border>
|
||||||
<Border.Effect>
|
<Border.Effect>
|
||||||
<!-- TODO: Pulse 10-20 -->
|
<!-- TODO: Pulse 10-20 -->
|
||||||
@ -34,107 +34,41 @@
|
|||||||
</Border>
|
</Border>
|
||||||
<!-- Profile management -->
|
<!-- Profile management -->
|
||||||
<StackPanel Grid.Column="0" Grid.Row="2" Orientation="Horizontal" Margin="0,5,0,0">
|
<StackPanel Grid.Column="0" Grid.Row="2" Orientation="Horizontal" Margin="0,5,0,0">
|
||||||
<Label Content="Active profile"></Label>
|
<Label Content="Active profile" />
|
||||||
<ComboBox Grid.Row="1" Grid.Column="1" Width="110" VerticalAlignment="Top" x:Name="ProfileModels" DisplayMemberPath="Name" Margin="5,0,0,0" />
|
<ComboBox Grid.Row="1" Grid.Column="1" Width="110" VerticalAlignment="Top" x:Name="ProfileModels"
|
||||||
|
DisplayMemberPath="Name" Margin="5,0,0,0" />
|
||||||
<Button x:Name="AddProfile" Content="Add profile" VerticalAlignment="Top"
|
<Button x:Name="AddProfile" Content="Add profile" VerticalAlignment="Top"
|
||||||
Style="{DynamicResource SquareButtonStyle}" Width="95" HorizontalAlignment="Left" Margin="10,0,0,0" />
|
Style="{DynamicResource SquareButtonStyle}" Width="95" HorizontalAlignment="Left" Margin="10,0,0,0" />
|
||||||
<Button x:Name="RemoveProfile" Content="Remove profile" VerticalAlignment="Top"
|
<Button x:Name="RemoveProfile" Content="Remove profile" VerticalAlignment="Top"
|
||||||
Style="{DynamicResource SquareButtonStyle}" Width="95" HorizontalAlignment="Right" Margin="10,0,0,0" />
|
Style="{DynamicResource SquareButtonStyle}" Width="95" HorizontalAlignment="Right"
|
||||||
|
Margin="10,0,0,0" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!-- Layer list -->
|
<!-- Layer list -->
|
||||||
<Label Grid.Column="1" Grid.Row="0" FontSize="20" HorizontalAlignment="Left" Content="Layers" Margin="10,0,0,0" />
|
<Label Grid.Column="1" Grid.Row="0" FontSize="20" HorizontalAlignment="Left" Content="Layers" Margin="10,0,0,0" />
|
||||||
<Border Grid.Column="1" Grid.Row="1" Background="#FF232323" BorderBrush="{DynamicResource HighlightBrush}"
|
<Border Grid.Column="1" Grid.Row="1" Background="#FF232323" BorderBrush="{DynamicResource HighlightBrush}"
|
||||||
BorderThickness="3" Margin="10,0,0,0" Height="400" Width="200">
|
BorderThickness="3" Margin="10,0,0,0" Height="400" Width="250">
|
||||||
<TreeView>
|
<TreeView ItemsSource="{Binding Path=SelectedProfileModel.Layers}">
|
||||||
<TreeView.Resources>
|
<TreeView.Resources>
|
||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
|
Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
|
||||||
</TreeView.Resources>
|
</TreeView.Resources>
|
||||||
<TreeViewItem>
|
<TreeView.ItemTemplate>
|
||||||
<!-- Layer example -->
|
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
|
||||||
<!-- Content -->
|
|
||||||
<TreeViewItem.Header>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<StackPanel.ContextMenu>
|
||||||
|
<ContextMenu>
|
||||||
|
<MenuItem Header="Rename" />
|
||||||
|
<MenuItem Header="Delete" />
|
||||||
|
<MenuItem Header="Properties" />
|
||||||
|
</ContextMenu>
|
||||||
|
</StackPanel.ContextMenu>
|
||||||
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" />
|
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" />
|
||||||
<Rectangle Height="18" Width="18" Stroke="Black" VerticalAlignment="Bottom"
|
<Image Height="18" Width="18" Source="{Binding LayerImage}" />
|
||||||
Fill="#FFFFE800" />
|
<TextBlock Margin="5,0,0,0" Text="{Binding Name}" VerticalAlignment="Center" />
|
||||||
<TextBlock Margin="5,0,0,0" Text="Layer 1" VerticalAlignment="Center" />
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</TreeViewItem.Header>
|
</HierarchicalDataTemplate>
|
||||||
<!-- Context menu -->
|
</TreeView.ItemTemplate>
|
||||||
<TreeViewItem.ContextMenu>
|
|
||||||
<ContextMenu>
|
|
||||||
<MenuItem Header="Rename" />
|
|
||||||
<MenuItem Header="Delete" />
|
|
||||||
<MenuItem Header="Properties" />
|
|
||||||
</ContextMenu>
|
|
||||||
</TreeViewItem.ContextMenu>
|
|
||||||
</TreeViewItem>
|
|
||||||
<TreeViewItem Header="Group 1">
|
|
||||||
<!-- Context menu -->
|
|
||||||
<TreeViewItem.ContextMenu>
|
|
||||||
<ContextMenu>
|
|
||||||
<MenuItem Header="Rename" />
|
|
||||||
<MenuItem Header="Delete" />
|
|
||||||
<MenuItem Header="Properties" />
|
|
||||||
</ContextMenu>
|
|
||||||
</TreeViewItem.ContextMenu>
|
|
||||||
<!-- Group example -->
|
|
||||||
<TreeViewItem>
|
|
||||||
<!-- Content -->
|
|
||||||
<TreeViewItem.Header>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" />
|
|
||||||
<Rectangle Height="18" Width="18" Stroke="Black" VerticalAlignment="Bottom"
|
|
||||||
Fill="#FFC50A0A" />
|
|
||||||
<TextBlock Margin="5,0,0,0" Text="Layer 2" VerticalAlignment="Center" />
|
|
||||||
</StackPanel>
|
|
||||||
</TreeViewItem.Header>
|
|
||||||
</TreeViewItem>
|
|
||||||
<!-- Circular Layer example -->
|
|
||||||
<TreeViewItem>
|
|
||||||
<TreeViewItem.Header>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" />
|
|
||||||
<Rectangle Height="18" Width="18" Stroke="Black" VerticalAlignment="Bottom"
|
|
||||||
Fill="#FF0AC50A" RadiusX="18" RadiusY="18" />
|
|
||||||
|
|
||||||
<TextBlock Margin="5,0,0,0" Text="Layer 3" VerticalAlignment="Center" />
|
|
||||||
</StackPanel>
|
|
||||||
</TreeViewItem.Header>
|
|
||||||
</TreeViewItem>
|
|
||||||
<TreeViewItem>
|
|
||||||
<TreeViewItem.Header>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" />
|
|
||||||
<Rectangle Height="18" Width="18" Stroke="Black" VerticalAlignment="Bottom" Fill="#FF2C0AC5" />
|
|
||||||
<TextBlock Margin="5,0,0,0" Text="Layer 4" VerticalAlignment="Center" />
|
|
||||||
</StackPanel>
|
|
||||||
</TreeViewItem.Header>
|
|
||||||
</TreeViewItem>
|
|
||||||
</TreeViewItem>
|
|
||||||
<TreeViewItem Header="Group 2">
|
|
||||||
<TreeViewItem>
|
|
||||||
<TreeViewItem.Header>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" />
|
|
||||||
<Rectangle Height="18" Width="18" Stroke="Black" VerticalAlignment="Bottom"
|
|
||||||
Fill="#FF0AC5C5" RadiusX="18" RadiusY="18" />
|
|
||||||
<TextBlock Margin="5,0,0,0" Text="Layer 5" VerticalAlignment="Center" />
|
|
||||||
</StackPanel>
|
|
||||||
</TreeViewItem.Header>
|
|
||||||
</TreeViewItem>
|
|
||||||
<TreeViewItem>
|
|
||||||
<TreeViewItem.Header>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" />
|
|
||||||
<Rectangle Height="18" Width="18" Stroke="Black" VerticalAlignment="Bottom" Fill="White" RadiusX="18" RadiusY="18" />
|
|
||||||
<TextBlock Margin="5,0,0,0" Text="Layer 6" VerticalAlignment="Center" />
|
|
||||||
</StackPanel>
|
|
||||||
</TreeViewItem.Header>
|
|
||||||
</TreeViewItem>
|
|
||||||
</TreeViewItem>
|
|
||||||
</TreeView>
|
</TreeView>
|
||||||
</Border>
|
</Border>
|
||||||
<Grid Grid.Column="1" Grid.Row="2" Margin="10,5,0,0">
|
<Grid Grid.Column="1" Grid.Row="2" Margin="10,5,0,0">
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user