1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Major refactor of core systems (MainModel replaces with a MainManager, EffectsManager and KeyboardManager)

This commit is contained in:
SpoinkyNL 2016-02-25 22:04:04 +01:00
parent 6da41400fb
commit 60d15a12e6
50 changed files with 937 additions and 1171 deletions

View File

@ -1,93 +1,61 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14 # Visual Studio 14
VisualStudioVersion = 14.0.23107.0 VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis", "Artemis\Artemis.csproj", "{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis", "Artemis\Artemis.csproj", "{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}"
EndProject EndProject
Project("{6141683F-8A12-4E36-9623-2EB02B2C2303}") = "ArtemisSetup", "ArtemisSetup\ArtemisSetup.isproj", "{9E76B2E0-12AE-431D-8FA5-2233D6853F29}" Global
EndProject GlobalSection(SolutionConfigurationPlatforms) = preSolution
Global CD_ROM|Any CPU = CD_ROM|Any CPU
GlobalSection(SolutionConfigurationPlatforms) = preSolution CD_ROM|x64 = CD_ROM|x64
CD_ROM|Any CPU = CD_ROM|Any CPU CD_ROM|x86 = CD_ROM|x86
CD_ROM|x64 = CD_ROM|x64 Debug|Any CPU = Debug|Any CPU
CD_ROM|x86 = CD_ROM|x86 Debug|x64 = Debug|x64
Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86
Debug|x64 = Debug|x64 DVD-5|Any CPU = DVD-5|Any CPU
Debug|x86 = Debug|x86 DVD-5|x64 = DVD-5|x64
DVD-5|Any CPU = DVD-5|Any CPU DVD-5|x86 = DVD-5|x86
DVD-5|x64 = DVD-5|x64 Release|Any CPU = Release|Any CPU
DVD-5|x86 = DVD-5|x86 Release|x64 = Release|x64
Release|Any CPU = Release|Any CPU Release|x86 = Release|x86
Release|x64 = Release|x64 SingleImage|Any CPU = SingleImage|Any CPU
Release|x86 = Release|x86 SingleImage|x64 = SingleImage|x64
SingleImage|Any CPU = SingleImage|Any CPU SingleImage|x86 = SingleImage|x86
SingleImage|x64 = SingleImage|x64 EndGlobalSection
SingleImage|x86 = SingleImage|x86 GlobalSection(ProjectConfigurationPlatforms) = postSolution
EndGlobalSection {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
GlobalSection(ProjectConfigurationPlatforms) = postSolution {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x64.ActiveCfg = Release|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|Any CPU.Build.0 = Release|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x64.Build.0 = Release|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x64.ActiveCfg = Release|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x86.ActiveCfg = Release|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x64.Build.0 = Release|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x86.Build.0 = Release|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x86.ActiveCfg = Release|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x86.Build.0 = Release|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x64.ActiveCfg = Debug|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|Any CPU.Build.0 = Debug|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x64.Build.0 = Debug|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x64.ActiveCfg = Debug|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x86.ActiveCfg = Debug|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x64.Build.0 = Debug|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x86.Build.0 = Debug|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x86.ActiveCfg = Debug|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x86.Build.0 = Debug|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x64.ActiveCfg = Debug|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|Any CPU.Build.0 = Debug|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x64.Build.0 = Debug|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x64.ActiveCfg = Debug|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x86.ActiveCfg = Debug|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x64.Build.0 = Debug|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x86.Build.0 = Debug|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x86.ActiveCfg = Debug|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x86.Build.0 = Debug|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|Any CPU.Build.0 = Release|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|Any CPU.ActiveCfg = Release|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x64.ActiveCfg = Release|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|Any CPU.Build.0 = Release|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x64.Build.0 = Release|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x64.ActiveCfg = Release|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x86.ActiveCfg = Release|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x64.Build.0 = Release|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x86.Build.0 = Release|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x86.ActiveCfg = Release|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x86.Build.0 = Release|x86 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x64.ActiveCfg = Release|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|Any CPU.Build.0 = Release|Any CPU {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x64.Build.0 = Release|x64
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x64.ActiveCfg = Release|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x86.ActiveCfg = Release|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x64.Build.0 = Release|x64 {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x86.Build.0 = Release|x86
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x86.ActiveCfg = Release|x86 EndGlobalSection
{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x86.Build.0 = Release|x86 GlobalSection(SolutionProperties) = preSolution
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.CD_ROM|Any CPU.ActiveCfg = CD_ROM HideSolutionNode = FALSE
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.CD_ROM|Any CPU.Build.0 = CD_ROM EndGlobalSection
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.CD_ROM|x64.ActiveCfg = CD_ROM EndGlobal
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.CD_ROM|x64.Build.0 = CD_ROM
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.CD_ROM|x86.ActiveCfg = CD_ROM
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.CD_ROM|x86.Build.0 = CD_ROM
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Debug|Any CPU.ActiveCfg = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Debug|Any CPU.Build.0 = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Debug|x64.ActiveCfg = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Debug|x64.Build.0 = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Debug|x86.ActiveCfg = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Debug|x86.Build.0 = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.DVD-5|Any CPU.ActiveCfg = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.DVD-5|Any CPU.Build.0 = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.DVD-5|x64.ActiveCfg = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.DVD-5|x64.Build.0 = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.DVD-5|x86.ActiveCfg = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.DVD-5|x86.Build.0 = DVD-5
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Release|Any CPU.ActiveCfg = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Release|Any CPU.Build.0 = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Release|x64.ActiveCfg = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Release|x64.Build.0 = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Release|x86.ActiveCfg = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.Release|x86.Build.0 = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.SingleImage|Any CPU.ActiveCfg = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.SingleImage|Any CPU.Build.0 = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.SingleImage|x64.ActiveCfg = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.SingleImage|x64.Build.0 = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.SingleImage|x86.ActiveCfg = SingleImage
{9E76B2E0-12AE-431D-8FA5-2233D6853F29}.SingleImage|x86.Build.0 = SingleImage
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -4,7 +4,8 @@
<configSections> <configSections>
<sectionGroup name="userSettings" <sectionGroup name="userSettings"
type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Artemis.Modules.Games.RocketLeague.RocketLeague" <section name="Artemis.Modules.Overlays.VolumeDisplay.VolumeDisplay" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="Artemis.Modules.Games.RocketLeague.RocketLeague"
type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
allowExeDefinition="MachineToLocalUser" requirePermission="false" /> allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="Artemis.Settings.Offsets" <section name="Artemis.Settings.Offsets"
@ -22,9 +23,6 @@
<section name="Artemis.Settings.CounterStrike" <section name="Artemis.Settings.CounterStrike"
type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
allowExeDefinition="MachineToLocalUser" requirePermission="false" /> allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="Artemis.Settings.VolumeDisplay"
type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="Artemis.Settings.AudioVisualization" <section name="Artemis.Settings.AudioVisualization"
type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
allowExeDefinition="MachineToLocalUser" requirePermission="false" /> allowExeDefinition="MachineToLocalUser" requirePermission="false" />
@ -47,6 +45,17 @@
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup> </startup>
<userSettings> <userSettings>
<Artemis.Modules.Overlays.VolumeDisplay.VolumeDisplay>
<setting name="Enabled" serializeAs="String">
<value>True</value>
</setting>
<setting name="MainColor" serializeAs="String">
<value>#FFFF2900</value>
</setting>
<setting name="SecondaryColor" serializeAs="String">
<value>#FF26F600</value>
</setting>
</Artemis.Modules.Overlays.VolumeDisplay.VolumeDisplay>
<Artemis.Modules.Games.RocketLeague.RocketLeague> <Artemis.Modules.Games.RocketLeague.RocketLeague>
<setting name="Enabled" serializeAs="String"> <setting name="Enabled" serializeAs="String">
<value>True</value> <value>True</value>
@ -95,6 +104,9 @@
</setting> </setting>
</Artemis.Modules.Effects.AudioVisualizer.AudioVisualization> </Artemis.Modules.Effects.AudioVisualizer.AudioVisualization>
<Artemis.Modules.Games.CounterStrike.CounterStrike> <Artemis.Modules.Games.CounterStrike.CounterStrike>
<setting name="Enabled" serializeAs="String">
<value>True</value>
</setting>
<setting name="GameDirectory" serializeAs="String"> <setting name="GameDirectory" serializeAs="String">
<value /> <value />
</setting> </setting>
@ -119,9 +131,6 @@
<setting name="LowHpEnabled" serializeAs="String"> <setting name="LowHpEnabled" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="Enabled" serializeAs="String">
<value>True</value>
</setting>
</Artemis.Modules.Games.CounterStrike.CounterStrike> </Artemis.Modules.Games.CounterStrike.CounterStrike>
<Artemis.Settings.CounterStrike> <Artemis.Settings.CounterStrike>
<setting name="GameDirectory" serializeAs="String"> <setting name="GameDirectory" serializeAs="String">
@ -149,17 +158,6 @@
<value>True</value> <value>True</value>
</setting> </setting>
</Artemis.Settings.CounterStrike> </Artemis.Settings.CounterStrike>
<Artemis.Settings.VolumeDisplay>
<setting name="MainColor" serializeAs="String">
<value>#FFFF2900</value>
</setting>
<setting name="SecondaryColor" serializeAs="String">
<value>#FF26F600</value>
</setting>
<setting name="Enabled" serializeAs="String">
<value>True</value>
</setting>
</Artemis.Settings.VolumeDisplay>
<Artemis.Settings.AudioVisualization> <Artemis.Settings.AudioVisualization>
<setting name="Sensitivity" serializeAs="String"> <setting name="Sensitivity" serializeAs="String">
<value>4</value> <value>4</value>

View File

@ -228,7 +228,7 @@
</Compile> </Compile>
<Compile Include="ArtemisBootstrapper.cs" /> <Compile Include="ArtemisBootstrapper.cs" />
<Compile Include="Events\ToggleEnabled.cs" /> <Compile Include="Events\ToggleEnabled.cs" />
<Compile Include="Events\ChangeActiveEffect.cs" /> <Compile Include="Events\ActiveEffectChanged.cs" />
<Compile Include="Events\ChangeBitmap.cs" /> <Compile Include="Events\ChangeBitmap.cs" />
<Compile Include="KeyboardProviders\Corsair\CorsairRGB.cs" /> <Compile Include="KeyboardProviders\Corsair\CorsairRGB.cs" />
<Compile Include="KeyboardProviders\KeyboardProvider.cs" /> <Compile Include="KeyboardProviders\KeyboardProvider.cs" />
@ -241,6 +241,9 @@
<Compile Include="KeyboardProviders\ProviderHelper.cs" /> <Compile Include="KeyboardProviders\ProviderHelper.cs" />
<Compile Include="KeyboardProviders\Razer\BlackWidow.cs" /> <Compile Include="KeyboardProviders\Razer\BlackWidow.cs" />
<Compile Include="KeyboardProviders\Razer\Utilities\RazerUtilities.cs" /> <Compile Include="KeyboardProviders\Razer\Utilities\RazerUtilities.cs" />
<Compile Include="Managers\EffectManager.cs" />
<Compile Include="Managers\KeyboardManager.cs" />
<Compile Include="Managers\MainManager.cs" />
<Compile Include="Models\EffectModel.cs" /> <Compile Include="Models\EffectModel.cs" />
<Compile Include="Models\GamePointersCollectionModel.cs" /> <Compile Include="Models\GamePointersCollectionModel.cs" />
<Compile Include="Modules\Effects\AudioVisualizer\AudioVisualization.Designer.cs"> <Compile Include="Modules\Effects\AudioVisualizer\AudioVisualization.Designer.cs">
@ -278,13 +281,12 @@
<DependentUpon>Witcher3.settings</DependentUpon> <DependentUpon>Witcher3.settings</DependentUpon>
</Compile> </Compile>
<Compile Include="Modules\Games\Witcher3\Witcher3Model.cs" /> <Compile Include="Modules\Games\Witcher3\Witcher3Model.cs" />
<Compile Include="Models\MainModel.cs" />
<Compile Include="Models\OverlayModel.cs" /> <Compile Include="Models\OverlayModel.cs" />
<Compile Include="Modules\Overlays\VolumeDisplay\VolumeDisplay.cs" /> <Compile Include="Modules\Overlays\VolumeDisplay\VolumeDisplay.cs" />
<Compile Include="Modules\Overlays\VolumeDisplay\VolumeDisplay.Designer.cs"> <Compile Include="Modules\Overlays\VolumeDisplay\VolumeDisplay.Designer.cs">
<DependentUpon>VolumeDisplay.settings</DependentUpon>
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>VolumeDisplay.settings</DependentUpon>
</Compile> </Compile>
<Compile Include="Modules\Overlays\VolumeDisplay\VolumeDisplayModel.cs" /> <Compile Include="Modules\Overlays\VolumeDisplay\VolumeDisplayModel.cs" />
<Compile Include="Modules\Effects\AudioVisualizer\AudioVisualizerSettings.cs" /> <Compile Include="Modules\Effects\AudioVisualizer\AudioVisualizerSettings.cs" />
@ -323,6 +325,7 @@
<Compile Include="Utilities\Keyboard\Key.cs" /> <Compile Include="Utilities\Keyboard\Key.cs" />
<Compile Include="Utilities\Keyboard\KeyboardRectangle.cs" /> <Compile Include="Utilities\Keyboard\KeyboardRectangle.cs" />
<Compile Include="Utilities\ShellLink.cs" /> <Compile Include="Utilities\ShellLink.cs" />
<Compile Include="ViewModels\Abstract\EffectViewModel.cs" />
<Compile Include="ViewModels\EffectsViewModel.cs" /> <Compile Include="ViewModels\EffectsViewModel.cs" />
<Compile Include="Modules\Effects\AudioVisualizer\AudioVisualizerViewModel.cs" /> <Compile Include="Modules\Effects\AudioVisualizer\AudioVisualizerViewModel.cs" />
<Compile Include="Modules\Effects\Debug\DebugEffectViewModel.cs" /> <Compile Include="Modules\Effects\Debug\DebugEffectViewModel.cs" />

View File

@ -1,8 +1,8 @@
namespace Artemis.Events namespace Artemis.Events
{ {
public class ChangeActiveEffect public class ActiveEffectChanged
{ {
public ChangeActiveEffect(string activeEffect) public ActiveEffectChanged(string activeEffect)
{ {
ActiveEffect = activeEffect; ActiveEffect = activeEffect;
} }

View File

@ -4,15 +4,15 @@ namespace Artemis.KeyboardProviders
{ {
public class KeyboardRegion public class KeyboardRegion
{ {
public string RegionName { get; set; }
public Point TopLeft { get; set; }
public Point BottomRight { get; set; }
public KeyboardRegion(string regionName, Point topLeft, Point bottomRight) public KeyboardRegion(string regionName, Point topLeft, Point bottomRight)
{ {
RegionName = regionName; RegionName = regionName;
TopLeft = topLeft; TopLeft = topLeft;
BottomRight = bottomRight; BottomRight = bottomRight;
} }
public string RegionName { get; set; }
public Point TopLeft { get; set; }
public Point BottomRight { get; set; }
} }
} }

View File

@ -0,0 +1,133 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Artemis.Events;
using Artemis.Models;
using Artemis.Settings;
using Caliburn.Micro;
namespace Artemis.Managers
{
public class EffectManager
{
private readonly MainManager _mainManager;
private readonly IEventAggregator _events;
public EffectManager(MainManager mainManager, IEventAggregator events)
{
_mainManager = mainManager;
_events = events;
EffectModels = new List<EffectModel>();
}
public List<EffectModel> EffectModels { get; set; }
public EffectModel ActiveEffect { get; private set; }
public IEnumerable<OverlayModel> EnabledOverlays
{
get { return EffectModels.OfType<OverlayModel>().Where(o => o.Enabled); }
}
public IEnumerable<GameModel> EnabledGames
{
get { return EffectModels.OfType<GameModel>().Where(g => g.Enabled); }
}
/// <summary>
/// Loads the last active effect from settings and enables it.
/// </summary>
/// <returns>Whether enabling was successful or not.</returns>
public EffectModel GetLastEffect()
{
if (General.Default.LastEffect == null)
return null;
var effect = EffectModels.FirstOrDefault(e => e.Name == General.Default.LastEffect);
// Fall back to the first effect found, in case settings are messed up
return effect ?? EffectModels.First();
}
/// <summary>
/// Disables the current effect and changes it to the provided effect.
/// </summary>
/// <param name="effectModel"></param>
public void ChangeEffect(EffectModel effectModel)
{
if (effectModel is OverlayModel)
throw new ArgumentException("Can't set an Overlay effect as the active effect");
// Game models are only used if they are enabled
var gameModel = effectModel as GameModel;
if (gameModel != null)
if (!gameModel.Enabled)
return;
if (ActiveEffect != null)
if (effectModel.Name == ActiveEffect.Name)
return;
ActiveEffect?.Dispose();
if (!_mainManager.Running)
{
_mainManager.Start(effectModel);
return;
}
ActiveEffect = effectModel;
ActiveEffect.Enable();
if (ActiveEffect is GameModel)
return;
// Non-game effects are stored as the new LastEffect.
General.Default.LastEffect = ActiveEffect.Name;
General.Default.Save();
// Let the ViewModels know
_events.PublishOnUIThread(new ActiveEffectChanged(ActiveEffect.Name));
}
/// <summary>
/// Clears the current effect
/// </summary>
public void ClearEffect()
{
if (ActiveEffect == null)
return;
ActiveEffect.Dispose();
ActiveEffect = null;
General.Default.LastEffect = null;
General.Default.Save();
}
/// <summary>
/// Disables the given game
/// </summary>
/// <param name="activeEffect"></param>
public void DisableGame(EffectModel activeEffect)
{
if (GetLastEffect() == null)
ClearEffect();
else
ChangeEffect(GetLastEffect());
}
/// <summary>
/// Disables the current ActiveEffect if it's a game that is disabled.
/// </summary>
public void DisableInactiveGame()
{
if (!(ActiveEffect is GameModel))
return;
if (EnabledGames.Contains(ActiveEffect))
return;
DisableGame(ActiveEffect);
}
}
}

View File

@ -0,0 +1,65 @@
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Artemis.KeyboardProviders;
using Artemis.Settings;
namespace Artemis.Managers
{
public class KeyboardManager
{
private readonly MainManager _mainManager;
public KeyboardManager(MainManager mainManager)
{
_mainManager = mainManager;
KeyboardProviders = ProviderHelper.GetKeyboardProviders();
}
public List<KeyboardProvider> KeyboardProviders { get; set; }
public KeyboardProvider ActiveKeyboard { get; set; }
public bool LoadLastKeyboard()
{
var keyboard = KeyboardProviders.FirstOrDefault(k => k.Name == General.Default.LastKeyboard);
return ChangeKeyboard(keyboard ?? KeyboardProviders.First());
}
public bool ChangeKeyboard(KeyboardProvider keyboardProvider)
{
if (keyboardProvider == null)
return false;
if (ActiveKeyboard != null)
if (keyboardProvider.Name == ActiveKeyboard.Name)
return true;
ReleaseActiveKeyboard();
// Disable everything if there's no active keyboard found
if (!keyboardProvider.CanEnable())
{
MessageBox.Show(keyboardProvider.CantEnableText, "Artemis (╯°□°)╯︵ ┻━┻", MessageBoxButtons.OK,
MessageBoxIcon.Warning);
return false;
}
ActiveKeyboard = keyboardProvider;
ActiveKeyboard.Enable();
General.Default.LastKeyboard = ActiveKeyboard.Name;
General.Default.Save();
return true;
}
public void ReleaseActiveKeyboard()
{
if (ActiveKeyboard == null)
return;
ActiveKeyboard.Disable();
ActiveKeyboard = null;
}
}
}

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Drawing; using System.Drawing;
using Artemis.Managers;
namespace Artemis.Models namespace Artemis.Models
{ {
@ -7,12 +8,12 @@ namespace Artemis.Models
{ {
public delegate void SettingsUpdateHandler(EffectSettings settings); public delegate void SettingsUpdateHandler(EffectSettings settings);
public MainModel MainModel; public MainManager MainManager;
public string Name; public string Name;
protected EffectModel(MainModel mainModel) protected EffectModel(MainManager mainManager)
{ {
MainModel = mainModel; MainManager = mainManager;
} }
public abstract void Dispose(); public abstract void Dispose();

View File

@ -1,11 +1,13 @@
namespace Artemis.Models using Artemis.Managers;
namespace Artemis.Models
{ {
public abstract class GameModel : EffectModel public abstract class GameModel : EffectModel
{ {
public bool Enabled; public bool Enabled;
public string ProcessName; public string ProcessName;
protected GameModel(MainModel mainModel) : base(mainModel) protected GameModel(MainManager mainManager) : base(mainManager)
{ {
} }
} }

View File

@ -1,323 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using Artemis.Events;
using Artemis.KeyboardProviders;
using Artemis.Settings;
using Artemis.Utilities.GameState;
using Artemis.Utilities.Keyboard;
using Artemis.Utilities.Memory;
using Caliburn.Micro;
namespace Artemis.Models
{
public class MainModel
{
private readonly int _fps;
private readonly BackgroundWorker _processWorker;
private readonly BackgroundWorker _updateWorker;
private EffectModel _activeEffect;
private bool _wasSuspendedBeforeGame;
public MainModel(IEventAggregator events)
{
EffectModels = new List<EffectModel>();
KeyboardProviders = ProviderHelper.GetKeyboardProviders();
GameStateWebServer = new GameStateWebServer();
KeyboardHook = new KeyboardHook();
Suspended = false;
Events = events;
_fps = 25;
_updateWorker = new BackgroundWorker {WorkerSupportsCancellation = true};
_processWorker = new BackgroundWorker {WorkerSupportsCancellation = true};
_updateWorker.DoWork += UpdateWorker_DoWork;
_processWorker.DoWork += ProcessWorker_DoWork;
}
public KeyboardHook KeyboardHook { get; set; }
public KeyboardProvider ActiveKeyboard { get; set; }
public List<EffectModel> EffectModels { get; set; }
public List<KeyboardProvider> KeyboardProviders { get; set; }
public GameStateWebServer GameStateWebServer { get; set; }
public IEventAggregator Events { get; set; }
public bool Enabled { get; private set; }
public bool Suspended { get; private set; }
#region Effect methods
public void StartEffects()
{
if (Enabled)
return;
if (_updateWorker.IsBusy || _processWorker.IsBusy)
{
Events.PublishOnUIThread(new ToggleEnabled(Enabled));
return;
}
LoadLastKeyboard();
// If no keyboard was loaded, don't enable effects.
if (ActiveKeyboard == null)
return;
// Start the webserver
GameStateWebServer.Start();
// Load last non-game effect and enable
LoadLastEffect();
// Start the Background Workers
_updateWorker.RunWorkerAsync();
_processWorker.RunWorkerAsync();
Enabled = true;
Events.PublishOnUIThread(new ToggleEnabled(Enabled));
if (General.Default.Suspended && !Suspended)
ToggleSuspension();
}
public void ShutdownEffects()
{
if (!Enabled)
return;
// Stop the Background Worker
_updateWorker.CancelAsync();
_processWorker.CancelAsync();
// Dispose the current active effect
_activeEffect?.Dispose();
_activeEffect = null;
ActiveKeyboard?.Disable();
ActiveKeyboard = null;
Enabled = false;
Events.PublishOnUIThread(new ToggleEnabled(Enabled));
}
private void LoadLastEffect()
{
var effect = EffectModels.FirstOrDefault(e => e.Name == General.Default.LastEffect);
ChangeEffect(effect ?? EffectModels.First(e => e.Name == "TypeWave"));
}
private void ChangeEffect(EffectModel effectModel)
{
// Can't set a new effect if ActiveKeyboard is null
if (ActiveKeyboard == null)
return;
if (effectModel is OverlayModel)
throw new ArgumentException("Can't set an Overlay effect as the active effect");
// Game models are only used if they are enabled
var gameModel = effectModel as GameModel;
if (gameModel != null)
if (!gameModel.Enabled)
return;
if (_activeEffect != null && effectModel.Name == _activeEffect.Name)
return;
_activeEffect?.Dispose();
// If needed, unsuspend when loading a new effect
if (Suspended)
{
_wasSuspendedBeforeGame = true;
ToggleSuspension();
}
_activeEffect = effectModel;
_activeEffect.Enable();
if (_activeEffect is GameModel)
return;
// Non-game effects are stored as the new LastEffect.
General.Default.LastEffect = _activeEffect.Name;
General.Default.Save();
// Let the ViewModels know
Events.PublishOnUIThread(new ChangeActiveEffect(_activeEffect.Name));
}
public void EnableEffect(EffectModel effectModel)
{
if (effectModel is GameModel || effectModel is OverlayModel)
return;
ChangeEffect(effectModel);
}
public void ToggleSuspension()
{
if (Suspended)
{
LoadLastKeyboard();
// Don't resume if no keyboard was found
if (ActiveKeyboard == null)
return;
Suspended = false;
General.Default.Suspended = false;
General.Default.Save();
Events.PublishOnUIThread(new ChangeActiveEffect(_activeEffect?.Name));
return;
}
Suspended = true;
General.Default.Suspended = true;
General.Default.Save();
ActiveKeyboard?.Disable();
ActiveKeyboard = null;
Events.PublishOnUIThread(new ChangeActiveEffect(_activeEffect?.Name));
}
public bool IsEnabled(EffectModel effectModel)
{
if (Suspended)
return false;
if (effectModel is GameModel)
return false;
return General.Default.LastEffect == effectModel.Name;
}
#endregion
#region Keyboard methods
private void LoadLastKeyboard()
{
var keyboard = KeyboardProviders.FirstOrDefault(k => k.Name == General.Default.LastKeyboard);
ChangeKeyboard(keyboard ?? KeyboardProviders.First());
}
public void ChangeKeyboard(KeyboardProvider keyboardProvider)
{
if (ActiveKeyboard != null && keyboardProvider.Name == ActiveKeyboard.Name)
return;
ActiveKeyboard?.Disable();
// Disable everything if there's no active keyboard found
if (!keyboardProvider.CanEnable())
{
ActiveKeyboard = null;
MessageBox.Show(keyboardProvider.CantEnableText, "Artemis (╯°□°)╯︵ ┻━┻",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
ShutdownEffects();
return;
}
ActiveKeyboard = keyboardProvider;
ActiveKeyboard.Enable();
General.Default.LastKeyboard = ActiveKeyboard.Name;
General.Default.Save();
}
#endregion
#region Workers
private void UpdateWorker_DoWork(object sender, DoWorkEventArgs e)
{
var sw = new Stopwatch();
while (!_updateWorker.CancellationPending)
{
if (ActiveKeyboard == null || Suspended || _activeEffect == null)
{
Thread.Sleep(1000/_fps);
continue;
}
sw.Start();
// Update the current effect
_activeEffect.Update();
// Get ActiveEffect's bitmap
var bitmap = _activeEffect.GenerateBitmap();
// Draw enabled overlays on top
foreach (var overlayModel in EffectModels.OfType<OverlayModel>()
.Where(overlayModel => overlayModel.Enabled))
{
overlayModel.Update();
bitmap = bitmap != null ? overlayModel.GenerateBitmap(bitmap) : overlayModel.GenerateBitmap();
}
// If it exists, send bitmap to the device
if (bitmap != null && ActiveKeyboard != null)
{
ActiveKeyboard.DrawBitmap(bitmap);
// debugging TODO: Disable when window isn't shown
Events.PublishOnUIThread(new ChangeBitmap(bitmap));
}
// Sleep according to time left this frame
var sleep = (int) (1000/_fps - sw.ElapsedMilliseconds);
if (sleep > 0)
Thread.Sleep(sleep);
sw.Reset();
}
}
private void ProcessWorker_DoWork(object sender, DoWorkEventArgs e)
{
while (!_processWorker.CancellationPending)
{
var foundProcess = false;
// ReSharper disable once LoopCanBePartlyConvertedToQuery
foreach (var effectModel in EffectModels.OfType<GameModel>())
{
var process = MemoryHelpers.GetProcessIfRunning(effectModel.ProcessName);
if (process == null)
continue;
if (process.HasExited)
continue;
// If the active effect is a disabled game model, disable it
var model = _activeEffect as GameModel;
if (model != null && !model.Enabled)
LoadLastEffect();
else
{
ChangeEffect(effectModel);
foundProcess = true;
}
}
// If no game process is found, but the active effect still belongs to a game,
// set it to a normal effect, and if needed, suspend again.
if (!foundProcess && _activeEffect is GameModel)
{
LoadLastEffect();
if (_wasSuspendedBeforeGame)
{
ToggleSuspension();
_wasSuspendedBeforeGame = false;
}
}
Thread.Sleep(1000);
}
}
#endregion
}
}

View File

@ -1,4 +1,5 @@
using System.Drawing; using System.Drawing;
using Artemis.Managers;
namespace Artemis.Models namespace Artemis.Models
{ {
@ -7,11 +8,10 @@ namespace Artemis.Models
private bool _enabled; private bool _enabled;
public string ProcessName; public string ProcessName;
protected OverlayModel(MainModel mainModel) : base(mainModel) protected OverlayModel(MainManager mainManager) : base(mainManager)
{ {
} }
// Overlay Enabled() and Dispose() is called when changing the Enabled value
public bool Enabled public bool Enabled
{ {
get { return _enabled; } get { return _enabled; }

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Linq; using System.Linq;
using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
using Artemis.Utilities; using Artemis.Utilities;
using Artemis.Utilities.Audio; using Artemis.Utilities.Audio;
@ -19,7 +20,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
private bool _generating; private bool _generating;
private IWaveIn _waveIn; private IWaveIn _waveIn;
public AudioVisualizerModel(MainModel mainModel, AudioVisualizerSettings settings) : base(mainModel) public AudioVisualizerModel(MainManager mainManager, AudioVisualizerSettings settings) : base(mainManager)
{ {
Settings = settings; Settings = settings;
Name = "Audiovisualizer"; Name = "Audiovisualizer";
@ -51,7 +52,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
public override void Enable() public override void Enable()
{ {
Lines = MainModel.ActiveKeyboard.Width; Lines = MainManager.KeyboardManager.ActiveKeyboard.Width;
// TODO: Device selection // TODO: Device selection
SelectedDeviceId = new MMDeviceEnumerator() SelectedDeviceId = new MMDeviceEnumerator()
@ -62,7 +63,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
for (var i = 0; i < Lines; i++) for (var i = 0; i < Lines; i++)
{ {
SoundRectangles.Add(new KeyboardRectangle( SoundRectangles.Add(new KeyboardRectangle(
MainModel.ActiveKeyboard, MainManager.KeyboardManager.ActiveKeyboard,
0, 0, new List<Color> 0, 0, new List<Color>
{ {
ColorHelpers.ToDrawingColor(Settings.TopColor), ColorHelpers.ToDrawingColor(Settings.TopColor),
@ -108,7 +109,8 @@ namespace Artemis.Modules.Effects.AudioVisualizer
// Apply Sensitivity setting // Apply Sensitivity setting
height = height*Settings.Sensitivity; height = height*Settings.Sensitivity;
var keyboardHeight = (int) Math.Round(MainModel.ActiveKeyboard.Height/100.00*height*Scale); var keyboardHeight =
(int) Math.Round(MainManager.KeyboardManager.ActiveKeyboard.Height/100.00*height*Scale);
if (keyboardHeight > SoundRectangles[i].Height) if (keyboardHeight > SoundRectangles[i].Height)
SoundRectangles[i].Height = keyboardHeight; SoundRectangles[i].Height = keyboardHeight;
else else
@ -118,7 +120,8 @@ namespace Artemis.Modules.Effects.AudioVisualizer
SoundRectangles[i].Width = Scale; SoundRectangles[i].Width = Scale;
if (Settings.FromBottom) if (Settings.FromBottom)
SoundRectangles[i].Y = MainModel.ActiveKeyboard.Height*Scale - SoundRectangles[i].Height; SoundRectangles[i].Y = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale -
SoundRectangles[i].Height;
} }
_generating = false; _generating = false;
} }
@ -131,7 +134,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer
// Lock the _spectrumData array while busy with it // Lock the _spectrumData array while busy with it
_generating = true; _generating = true;
var bitmap = MainModel.ActiveKeyboard.KeyboardBitmap(Scale); var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap)) using (var g = Graphics.FromImage(bitmap))
{ {
foreach (var soundRectangle in SoundRectangles) foreach (var soundRectangle in SoundRectangles)

View File

@ -47,7 +47,7 @@
Color used on top Color used on top
</TextBlock> </TextBlock>
<xctk:ColorPicker x:Name="TopColor" <xctk:ColorPicker x:Name="TopColor"
SelectedColor="{Binding Path=AudioVisualizerSettings.TopColor, Mode=TwoWay}" SelectedColor="{Binding Path=EffectSettings.TopColor, Mode=TwoWay}"
Grid.Row="1" Grid.Column="1" Width="110" HorizontalAlignment="Right" Grid.Row="1" Grid.Column="1" Width="110" HorizontalAlignment="Right"
VerticalAlignment="Center" Margin="0,5,-1,5" Height="22" /> VerticalAlignment="Center" Margin="0,5,-1,5" Height="22" />
@ -57,7 +57,7 @@
Color used in the middle Color used in the middle
</TextBlock> </TextBlock>
<xctk:ColorPicker x:Name="MiddleColor" <xctk:ColorPicker x:Name="MiddleColor"
SelectedColor="{Binding Path=AudioVisualizerSettings.MiddleColor, Mode=TwoWay}" SelectedColor="{Binding Path=EffectSettings.MiddleColor, Mode=TwoWay}"
Grid.Row="2" Grid.Column="1" Width="110" HorizontalAlignment="Right" Grid.Row="2" Grid.Column="1" Width="110" HorizontalAlignment="Right"
VerticalAlignment="Center" Margin="0,5,-1,5" Height="22" /> VerticalAlignment="Center" Margin="0,5,-1,5" Height="22" />
@ -67,7 +67,7 @@
Color used on the bottom Color used on the bottom
</TextBlock> </TextBlock>
<xctk:ColorPicker x:Name="Bottom" <xctk:ColorPicker x:Name="Bottom"
SelectedColor="{Binding Path=AudioVisualizerSettings.BottomColor, Mode=TwoWay}" SelectedColor="{Binding Path=EffectSettings.BottomColor, Mode=TwoWay}"
Grid.Row="3" Grid.Column="1" Width="110" HorizontalAlignment="Right" Grid.Row="3" Grid.Column="1" Width="110" HorizontalAlignment="Right"
VerticalAlignment="Center" Margin="0,5,-1,5" Height="22" /> VerticalAlignment="Center" Margin="0,5,-1,5" Height="22" />
@ -76,7 +76,7 @@
Height="16" Margin="0,9,0,10"> Height="16" Margin="0,9,0,10">
Grow bars bottom (broken, sorry!) Grow bars bottom (broken, sorry!)
</TextBlock> </TextBlock>
<controls:ToggleSwitch IsChecked="{Binding Path=AudioVisualizerSettings.FromBottom, Mode=TwoWay}" <controls:ToggleSwitch IsChecked="{Binding Path=EffectSettings.FromBottom, Mode=TwoWay}"
Grid.Row="4" Grid.Column="1" HorizontalAlignment="Right" OnLabel="Yes" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Right" OnLabel="Yes"
OffLabel="No" OffLabel="No"
Margin="0,0,-5,0" Width="114" IsEnabled="False" /> Margin="0,0,-5,0" Width="114" IsEnabled="False" />
@ -88,7 +88,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="Bars" Grid.Row="5" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="Bars" Grid.Row="5" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1"
Value="{Binding Path=AudioVisualizerSettings.Bars, Mode=TwoWay}" Minimum="2" Maximum="21" Value="{Binding Path=EffectSettings.Bars, Mode=TwoWay}" Minimum="2" Maximum="21"
SmallChange="1" IsSnapToTickEnabled="True" /> SmallChange="1" IsSnapToTickEnabled="True" />
<!-- Sensitivity --> <!-- Sensitivity -->
@ -98,7 +98,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="Sensitivity" Grid.Row="6" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="Sensitivity" Grid.Row="6" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1"
Value="{Binding Path=AudioVisualizerSettings.Sensitivity, Mode=TwoWay}" Minimum="1" Maximum="10" Value="{Binding Path=EffectSettings.Sensitivity, Mode=TwoWay}" Minimum="1" Maximum="10"
SmallChange="1" IsSnapToTickEnabled="True" /> SmallChange="1" IsSnapToTickEnabled="True" />
<!-- Fade speed --> <!-- Fade speed -->
@ -108,7 +108,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="FadeSpeed" Grid.Row="7" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="FadeSpeed" Grid.Row="7" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1"
Value="{Binding Path=AudioVisualizerSettings.FadeSpeed, Mode=TwoWay}" Minimum="1" Maximum="3" Value="{Binding Path=EffectSettings.FadeSpeed, Mode=TwoWay}" Minimum="1" Maximum="3"
SmallChange="1" IsSnapToTickEnabled="True" /> SmallChange="1" IsSnapToTickEnabled="True" />
<!-- Buttons --> <!-- Buttons -->

View File

@ -1,74 +1,31 @@
using Artemis.Events; using Artemis.Events;
using Artemis.Models; using Artemis.Managers;
using Artemis.ViewModels.Abstract;
using Caliburn.Micro; using Caliburn.Micro;
namespace Artemis.Modules.Effects.AudioVisualizer namespace Artemis.Modules.Effects.AudioVisualizer
{ {
public class AudioVisualizerViewModel : Screen, IHandle<ChangeActiveEffect> public class AudioVisualizerViewModel : EffectViewModel, IHandle<ActiveEffectChanged>
{ {
private AudioVisualizerSettings _audioVisualizerSettings; public AudioVisualizerViewModel(MainManager mainManager)
public AudioVisualizerViewModel(MainModel mainModel)
{ {
// Subscribe to main model // Subscribe to main model
MainModel = mainModel; MainManager = mainManager;
MainModel.Events.Subscribe(this); MainManager.Events.Subscribe(this);
// Settings are loaded from file by class // Settings are loaded from file by class
AudioVisualizerSettings = new AudioVisualizerSettings(); EffectSettings = new AudioVisualizerSettings();
// Create effect model and add it to MainModel // Create effect model and add it to MainManager
AudioVisualizerModel = new AudioVisualizerModel(mainModel, AudioVisualizerSettings); EffectModel = new AudioVisualizerModel(mainManager, (AudioVisualizerSettings) EffectSettings);
MainModel.EffectModels.Add(AudioVisualizerModel); MainManager.EffectManager.EffectModels.Add((AudioVisualizerModel) EffectModel);
} }
public MainModel MainModel { get; set; }
public AudioVisualizerModel AudioVisualizerModel { get; set; }
public static string Name => "Audio Visualizer"; public static string Name => "Audio Visualizer";
public bool EffectEnabled => MainModel.IsEnabled(AudioVisualizerModel);
public AudioVisualizerSettings AudioVisualizerSettings public void Handle(ActiveEffectChanged message)
{
get { return _audioVisualizerSettings; }
set
{
if (Equals(value, _audioVisualizerSettings)) return;
_audioVisualizerSettings = value;
NotifyOfPropertyChange(() => AudioVisualizerSettings);
}
}
public void Handle(ChangeActiveEffect message)
{ {
NotifyOfPropertyChange(() => EffectEnabled); NotifyOfPropertyChange(() => EffectEnabled);
} }
public void ToggleEffect()
{
if (EffectEnabled && !MainModel.Suspended)
MainModel.ToggleSuspension();
else if (!EffectEnabled && !MainModel.Suspended)
MainModel.EnableEffect(AudioVisualizerModel);
else
{
MainModel.ToggleSuspension();
MainModel.EnableEffect(AudioVisualizerModel);
}
}
public void SaveSettings()
{
AudioVisualizerSettings?.Save();
}
public void ResetSettings()
{
// TODO: Confirmation dialog (Generic MVVM approach)
AudioVisualizerSettings.ToDefault();
NotifyOfPropertyChange(() => AudioVisualizerSettings);
SaveSettings();
}
} }
} }

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
using Artemis.Utilities.Keyboard; using Artemis.Utilities.Keyboard;
@ -8,7 +9,7 @@ namespace Artemis.Modules.Effects.Debug
{ {
internal class DebugEffectModel : EffectModel internal class DebugEffectModel : EffectModel
{ {
public DebugEffectModel(MainModel mainModel, DebugEffectSettings settings) : base(mainModel) public DebugEffectModel(MainManager mainManager, DebugEffectSettings settings) : base(mainManager)
{ {
Name = "Debug Effect"; Name = "Debug Effect";
Settings = settings; Settings = settings;
@ -27,7 +28,7 @@ namespace Artemis.Modules.Effects.Debug
public override void Enable() public override void Enable()
{ {
KeyboardRectangle = new KeyboardRectangle(MainModel.ActiveKeyboard, 0, 0, new List<Color> KeyboardRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>
{ {
Color.Red, Color.Red,
Color.OrangeRed, Color.OrangeRed,

View File

@ -54,7 +54,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="Width" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="Width" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="None" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="None" TickFrequency="1"
Value="{Binding Path=DebugEffectSettings.Width, Mode=TwoWay}" Minimum="0" Maximum="84" Value="{Binding Path=EffectSettings.Width, Mode=TwoWay}" Minimum="0" Maximum="84"
SmallChange="1" IsSnapToTickEnabled="True" /> SmallChange="1" IsSnapToTickEnabled="True" />
<!-- Height --> <!-- Height -->
@ -64,7 +64,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="Height" Grid.Row="3" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="Height" Grid.Row="3" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="None" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="None" TickFrequency="1"
Value="{Binding Path=DebugEffectSettings.Height, Mode=TwoWay}" Minimum="0" Maximum="24" Value="{Binding Path=EffectSettings.Height, Mode=TwoWay}" Minimum="0" Maximum="24"
SmallChange="1" IsSnapToTickEnabled="True" /> SmallChange="1" IsSnapToTickEnabled="True" />
<!-- Scale --> <!-- Scale -->
@ -74,7 +74,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="Scale" Grid.Row="4" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="Scale" Grid.Row="4" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1"
Value="{Binding Path=DebugEffectSettings.Scale, Mode=TwoWay}" Minimum="1" Maximum="4" Value="{Binding Path=EffectSettings.Scale, Mode=TwoWay}" Minimum="1" Maximum="4"
SmallChange="1" IsSnapToTickEnabled="True" /> SmallChange="1" IsSnapToTickEnabled="True" />
<!-- Color rotation --> <!-- Color rotation -->
@ -82,7 +82,7 @@
Height="16" Margin="0,9,0,10"> Height="16" Margin="0,9,0,10">
Rotate colors on debug-rectangle Rotate colors on debug-rectangle
</TextBlock> </TextBlock>
<controls:ToggleSwitch IsChecked="{Binding Path=DebugEffectSettings.Rotate, Mode=TwoWay}" <controls:ToggleSwitch IsChecked="{Binding Path=EffectSettings.Rotate, Mode=TwoWay}"
Grid.Row="5" Grid.Column="1" HorizontalAlignment="Right" OnLabel="Yes" Grid.Row="5" Grid.Column="1" HorizontalAlignment="Right" OnLabel="Yes"
OffLabel="No" OffLabel="No"
Margin="0,0,-5,0" Width="114" /> Margin="0,0,-5,0" Width="114" />

View File

@ -5,49 +5,33 @@ using System.IO;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using Artemis.Events; using Artemis.Events;
using Artemis.Models; using Artemis.Managers;
using Artemis.ViewModels.Abstract;
using Caliburn.Micro; using Caliburn.Micro;
namespace Artemis.Modules.Effects.Debug namespace Artemis.Modules.Effects.Debug
{ {
internal class DebugEffectViewModel : Screen, IHandle<ChangeBitmap>, IHandle<ChangeActiveEffect> internal class DebugEffectViewModel : EffectViewModel, IHandle<ChangeBitmap>, IHandle<ActiveEffectChanged>
{ {
private DebugEffectSettings _debugEffectSettings;
private ImageSource _imageSource; private ImageSource _imageSource;
private string _selectedRectangleType; private string _selectedRectangleType;
public DebugEffectViewModel(MainModel mainModel) public DebugEffectViewModel(MainManager mainManager)
{ {
// Subscribe to main model // Subscribe to main model
MainModel = mainModel; MainManager = mainManager;
MainModel.Events.Subscribe(this); MainManager.Events.Subscribe(this);
// Settings are loaded from file by class // Settings are loaded from file by class
DebugEffectSettings = new DebugEffectSettings(); EffectSettings = new DebugEffectSettings();
// Create effect model and add it to MainModel // Create effect model and add it to MainManager
DebugEffectModel = new DebugEffectModel(mainModel, DebugEffectSettings); EffectModel = new DebugEffectModel(mainManager, (DebugEffectSettings) EffectSettings);
MainModel.EffectModels.Add(DebugEffectModel); MainManager.EffectManager.EffectModels.Add((DebugEffectModel) EffectModel);
} }
public MainModel MainModel { get; set; }
public DebugEffectModel DebugEffectModel { get; set; }
public static string Name => "Type Waves"; public static string Name => "Debug Effect";
public bool EffectEnabled => MainModel.IsEnabled(DebugEffectModel);
public DebugEffectSettings DebugEffectSettings
{
get { return _debugEffectSettings; }
set
{
if (Equals(value, _debugEffectSettings)) return;
_debugEffectSettings = value;
NotifyOfPropertyChange(() => DebugEffectSettings);
SelectedRectangleType = value.Type.ToString();
}
}
public BindableCollection<string> RectangleTypes public BindableCollection<string> RectangleTypes
=> new BindableCollection<string>(Enum.GetNames(typeof (LinearGradientMode))); => new BindableCollection<string>(Enum.GetNames(typeof (LinearGradientMode)));
@ -61,7 +45,8 @@ namespace Artemis.Modules.Effects.Debug
_selectedRectangleType = value; _selectedRectangleType = value;
NotifyOfPropertyChange(() => SelectedRectangleType); NotifyOfPropertyChange(() => SelectedRectangleType);
DebugEffectSettings.Type = (LinearGradientMode) Enum.Parse(typeof (LinearGradientMode), value); ((DebugEffectSettings) EffectSettings).Type =
(LinearGradientMode) Enum.Parse(typeof (LinearGradientMode), value);
} }
} }
@ -75,14 +60,13 @@ namespace Artemis.Modules.Effects.Debug
} }
} }
public void Handle(ChangeActiveEffect message) public void Handle(ActiveEffectChanged message)
{ {
NotifyOfPropertyChange(() => EffectEnabled); NotifyOfPropertyChange(() => EffectEnabled);
} }
public void Handle(ChangeBitmap message) public void Handle(ChangeBitmap message)
{ {
// Doesn't show transparancy
using (var memory = new MemoryStream()) using (var memory = new MemoryStream())
{ {
message.Bitmap.Save(memory, ImageFormat.Png); message.Bitmap.Save(memory, ImageFormat.Png);
@ -97,25 +81,5 @@ namespace Artemis.Modules.Effects.Debug
ImageSource = bitmapImage; ImageSource = bitmapImage;
} }
} }
public void ToggleEffect()
{
if (EffectEnabled && !MainModel.Suspended)
MainModel.ToggleSuspension();
else if (!EffectEnabled && !MainModel.Suspended)
MainModel.EnableEffect(DebugEffectModel);
else
{
MainModel.ToggleSuspension();
MainModel.EnableEffect(DebugEffectModel);
}
}
public void ResetSettings()
{
// TODO: Confirmation dialog (Generic MVVM approach)
DebugEffectSettings.ToDefault();
NotifyOfPropertyChange(() => DebugEffectSettings);
}
} }
} }

View File

@ -1,11 +1,12 @@
using System.Drawing; using System.Drawing;
using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
namespace Artemis.Modules.Effects.TypeHole namespace Artemis.Modules.Effects.TypeHole
{ {
public class TypeHoleModel : EffectModel public class TypeHoleModel : EffectModel
{ {
public TypeHoleModel(MainModel mainModel) : base(mainModel) public TypeHoleModel(MainManager mainManager) : base(mainManager)
{ {
Name = "TypeHole"; Name = "TypeHole";
} }

View File

@ -1,44 +1,28 @@
using Artemis.Events; using Artemis.Events;
using Artemis.Models; using Artemis.Managers;
using Artemis.ViewModels.Abstract;
using Caliburn.Micro; using Caliburn.Micro;
namespace Artemis.Modules.Effects.TypeHole namespace Artemis.Modules.Effects.TypeHole
{ {
public class TypeHoleViewModel : Screen, IHandle<ChangeActiveEffect> public class TypeHoleViewModel : EffectViewModel, IHandle<ActiveEffectChanged>
{ {
public TypeHoleViewModel(MainModel mainModel) public TypeHoleViewModel(MainManager mainManager)
{ {
// Subscribe to main model // Subscribe to main model
MainModel = mainModel; MainManager = mainManager;
MainModel.Events.Subscribe(this); MainManager.Events.Subscribe(this);
// Create effect model and add it to MainModel // Create effect model and add it to MainManager
TypeHoleModel = new TypeHoleModel(mainModel); EffectModel = new TypeHoleModel(mainManager);
MainModel.EffectModels.Add(TypeHoleModel); MainManager.EffectManager.EffectModels.Add((TypeHoleModel) EffectModel);
} }
public MainModel MainModel { get; set; }
public TypeHoleModel TypeHoleModel { get; set; }
public static string Name => "Type Holes (NYI)"; public static string Name => "Type Holes (NYI)";
public bool EffectEnabled => MainModel.IsEnabled(TypeHoleModel);
public void Handle(ChangeActiveEffect message) public void Handle(ActiveEffectChanged message)
{ {
NotifyOfPropertyChange(() => EffectEnabled); NotifyOfPropertyChange(() => EffectEnabled);
} }
public void ToggleEffect()
{
if (EffectEnabled && !MainModel.Suspended)
MainModel.ToggleSuspension();
else if (!EffectEnabled && !MainModel.Suspended)
MainModel.EnableEffect(TypeHoleModel);
else
{
MainModel.ToggleSuspension();
MainModel.EnableEffect(TypeHoleModel);
}
}
} }
} }

View File

@ -6,6 +6,7 @@ using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.KeyboardProviders.Corsair; using Artemis.KeyboardProviders.Corsair;
using Artemis.KeyboardProviders.Logitech.Utilities; using Artemis.KeyboardProviders.Logitech.Utilities;
using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
using Artemis.Utilities; using Artemis.Utilities;
@ -16,7 +17,7 @@ namespace Artemis.Modules.Effects.TypeWave
private readonly List<Wave> _waves; private readonly List<Wave> _waves;
private Color _randomColor; private Color _randomColor;
public TypeWaveModel(MainModel mainModel, TypeWaveSettings settings) : base(mainModel) public TypeWaveModel(MainManager mainManager, TypeWaveSettings settings) : base(mainManager)
{ {
Name = "TypeWave"; Name = "TypeWave";
_waves = new List<Wave>(); _waves = new List<Wave>();
@ -28,13 +29,13 @@ namespace Artemis.Modules.Effects.TypeWave
public override void Dispose() public override void Dispose()
{ {
MainModel.KeyboardHook.Unsubscribe(HandleKeypress); MainManager.KeyboardHook.Unsubscribe(HandleKeypress);
} }
public override void Enable() public override void Enable()
{ {
// Listener won't start unless the effect is active // Listener won't start unless the effect is active
MainModel.KeyboardHook.Subscribe(HandleKeypress); MainManager.KeyboardHook.Subscribe(HandleKeypress);
} }
public override void Update() public override void Update()
@ -71,13 +72,13 @@ namespace Artemis.Modules.Effects.TypeWave
if (_waves.Count == 0) if (_waves.Count == 0)
return null; return null;
var bitmap = MainModel.ActiveKeyboard.KeyboardBitmap(); var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap();
using (var g = Graphics.FromImage(bitmap)) using (var g = Graphics.FromImage(bitmap))
{ {
g.Clear(Color.Transparent); g.Clear(Color.Transparent);
g.SmoothingMode = SmoothingMode.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality;
// Don't want a foreach, collection is changed in different thread // Don't want a for-each, collection is changed in different thread
// ReSharper disable once ForCanBeConvertedToForeach // ReSharper disable once ForCanBeConvertedToForeach
for (var i = 0; i < _waves.Count; i++) for (var i = 0; i < _waves.Count; i++)
{ {
@ -88,7 +89,7 @@ namespace Artemis.Modules.Effects.TypeWave
_waves[i].Size, _waves[i].Size); _waves[i].Size, _waves[i].Size);
Color fillColor; Color fillColor;
if (MainModel.ActiveKeyboard is CorsairRGB) if (MainManager.KeyboardManager.ActiveKeyboard is CorsairRGB)
fillColor = Color.Black; fillColor = Color.Black;
else else
fillColor = Color.Transparent; fillColor = Color.Transparent;

View File

@ -46,7 +46,7 @@
Wave color Wave color
</TextBlock> </TextBlock>
<xctk:ColorPicker x:Name="MiddleColor" <xctk:ColorPicker x:Name="MiddleColor"
SelectedColor="{Binding Path=TypeWaveSettings.WaveColor, Mode=TwoWay}" SelectedColor="{Binding Path=EffectSettings.WaveColor, Mode=TwoWay}"
Grid.Row="1" Grid.Column="1" Width="110" HorizontalAlignment="Right" Grid.Row="1" Grid.Column="1" Width="110" HorizontalAlignment="Right"
VerticalAlignment="Center" Margin="0,5,-1,5" Height="22" /> VerticalAlignment="Center" Margin="0,5,-1,5" Height="22" />
@ -55,7 +55,7 @@
Height="16" Margin="0,8"> Height="16" Margin="0,8">
Use random colors Use random colors
</TextBlock> </TextBlock>
<controls:ToggleSwitch IsChecked="{Binding Path=TypeWaveSettings.IsRandomColors, Mode=TwoWay}" <controls:ToggleSwitch IsChecked="{Binding Path=EffectSettings.IsRandomColors, Mode=TwoWay}"
Grid.Row="2" Grid.Column="1" HorizontalAlignment="Right" OnLabel="Yes" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Right" OnLabel="Yes"
OffLabel="No" OffLabel="No"
Margin="0,0,-5,0" Width="114" /> Margin="0,0,-5,0" Width="114" />
@ -65,7 +65,7 @@
Height="16" Margin="0,8"> Height="16" Margin="0,8">
Shift through colors as the wave grows Shift through colors as the wave grows
</TextBlock> </TextBlock>
<controls:ToggleSwitch IsChecked="{Binding Path=TypeWaveSettings.IsShiftColors, Mode=TwoWay}" <controls:ToggleSwitch IsChecked="{Binding Path=EffectSettings.IsShiftColors, Mode=TwoWay}"
Grid.Row="3" Grid.Column="1" HorizontalAlignment="Right" OnLabel="Yes" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Right" OnLabel="Yes"
OffLabel="No" OffLabel="No"
Margin="0,0,-5,0" Width="114" /> Margin="0,0,-5,0" Width="114" />
@ -77,7 +77,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="ColorShiftSpeed" Grid.Row="4" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="ColorShiftSpeed" Grid.Row="4" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="None" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="None" TickFrequency="1"
Value="{Binding Path=TypeWaveSettings.ShiftColorSpeed, Mode=TwoWay}" Minimum="1" Maximum="200" Value="{Binding Path=EffectSettings.ShiftColorSpeed, Mode=TwoWay}" Minimum="1" Maximum="200"
SmallChange="45" IsSnapToTickEnabled="True" /> SmallChange="45" IsSnapToTickEnabled="True" />
<!-- TTL --> <!-- TTL -->
@ -87,7 +87,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="TimeToLive" Grid.Row="5" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="TimeToLive" Grid.Row="5" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="None" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="None" TickFrequency="1"
Value="{Binding Path=TypeWaveSettings.TimeToLive, Mode=TwoWay}" Minimum="100" Maximum="2000" Value="{Binding Path=EffectSettings.TimeToLive, Mode=TwoWay}" Minimum="100" Maximum="2000"
SmallChange="45" IsSnapToTickEnabled="True" /> SmallChange="45" IsSnapToTickEnabled="True" />
<!-- Growth speed --> <!-- Growth speed -->
@ -97,7 +97,7 @@
</TextBlock> </TextBlock>
<Slider x:Name="SpreadSpeed" Grid.Row="6" Grid.Column="1" VerticalAlignment="Center" <Slider x:Name="SpreadSpeed" Grid.Row="6" Grid.Column="1" VerticalAlignment="Center"
HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1" HorizontalAlignment="Right" Width="110" TickPlacement="BottomRight" TickFrequency="1"
Value="{Binding Path=TypeWaveSettings.SpreadSpeed, Mode=TwoWay}" Minimum="1" Maximum="6" Value="{Binding Path=EffectSettings.SpreadSpeed, Mode=TwoWay}" Minimum="1" Maximum="6"
SmallChange="1" IsSnapToTickEnabled="True" /> SmallChange="1" IsSnapToTickEnabled="True" />
<!-- Buttons --> <!-- Buttons -->

View File

@ -1,77 +1,31 @@
using Artemis.Events; using Artemis.Events;
using Artemis.Models; using Artemis.Managers;
using Artemis.ViewModels.Abstract;
using Caliburn.Micro; using Caliburn.Micro;
namespace Artemis.Modules.Effects.TypeWave namespace Artemis.Modules.Effects.TypeWave
{ {
public class TypeWaveViewModel : Screen, IHandle<ChangeActiveEffect> public class TypeWaveViewModel : EffectViewModel, IHandle<ActiveEffectChanged>
{ {
private TypeWaveSettings _typeWaveSettings; public TypeWaveViewModel(MainManager mainManager)
public TypeWaveViewModel(MainModel mainModel)
{ {
// Subscribe to main model // Subscribe to main model
MainModel = mainModel; MainManager = mainManager;
MainModel.Events.Subscribe(this); MainManager.Events.Subscribe(this);
// Settings are loaded from file by class // Settings are loaded from file by class
TypeWaveSettings = new TypeWaveSettings(); EffectSettings = new TypeWaveSettings();
// Create effect model and add it to MainModel // Create effect model and add it to MainManager
TypeWaveModel = new TypeWaveModel(mainModel, TypeWaveSettings); EffectModel = new TypeWaveModel(mainManager, (TypeWaveSettings) EffectSettings);
MainModel.EffectModels.Add(TypeWaveModel); MainManager.EffectManager.EffectModels.Add((TypeWaveModel) EffectModel);
} }
public MainModel MainModel { get; set; }
public TypeWaveModel TypeWaveModel { get; set; }
public static string Name => "Type Waves"; public static string Name => "Type Waves";
public bool EffectEnabled => MainModel.IsEnabled(TypeWaveModel);
public TypeWaveSettings TypeWaveSettings public void Handle(ActiveEffectChanged message)
{
get { return _typeWaveSettings; }
set
{
if (Equals(value, _typeWaveSettings)) return;
_typeWaveSettings = value;
NotifyOfPropertyChange(() => TypeWaveSettings);
}
}
public void Handle(ChangeActiveEffect message)
{ {
NotifyOfPropertyChange(() => EffectEnabled); NotifyOfPropertyChange(() => EffectEnabled);
} }
public void ToggleEffect()
{
if (EffectEnabled && !MainModel.Suspended)
MainModel.ToggleSuspension();
else if (!EffectEnabled && !MainModel.Suspended)
MainModel.EnableEffect(TypeWaveModel);
else
{
MainModel.ToggleSuspension();
MainModel.EnableEffect(TypeWaveModel);
}
}
public void SaveSettings()
{
if (TypeWaveModel == null)
return;
TypeWaveSettings.Save();
}
public void ResetSettings()
{
// TODO: Confirmation dialog (Generic MVVM approach)
TypeWaveSettings.ToDefault();
NotifyOfPropertyChange(() => TypeWaveSettings);
SaveSettings();
}
} }
} }

View File

@ -1,134 +1,134 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.42000 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace Artemis.Modules.Games.CounterStrike { namespace Artemis.Modules.Games.CounterStrike {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class CounterStrike : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class CounterStrike : global::System.Configuration.ApplicationSettingsBase {
private static CounterStrike defaultInstance = ((CounterStrike)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new CounterStrike()))); private static CounterStrike defaultInstance = ((CounterStrike)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new CounterStrike())));
public static CounterStrike Default { public static CounterStrike Default {
get { get {
return defaultInstance; return defaultInstance;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool Enabled { public bool Enabled {
get { get {
return ((bool)(this["Enabled"])); return ((bool)(this["Enabled"]));
} }
set { set {
this["Enabled"] = value; this["Enabled"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")] [global::System.Configuration.DefaultSettingValueAttribute("")]
public string GameDirectory { public string GameDirectory {
get { get {
return ((string)(this["GameDirectory"])); return ((string)(this["GameDirectory"]));
} }
set { set {
this["GameDirectory"] = value; this["GameDirectory"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool AmmoEnabled { public bool AmmoEnabled {
get { get {
return ((bool)(this["AmmoEnabled"])); return ((bool)(this["AmmoEnabled"]));
} }
set { set {
this["AmmoEnabled"] = value; this["AmmoEnabled"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("#FFFF2900")] [global::System.Configuration.DefaultSettingValueAttribute("#FFFF2900")]
public global::System.Windows.Media.Color AmmoMainColor { public global::System.Windows.Media.Color AmmoMainColor {
get { get {
return ((global::System.Windows.Media.Color)(this["AmmoMainColor"])); return ((global::System.Windows.Media.Color)(this["AmmoMainColor"]));
} }
set { set {
this["AmmoMainColor"] = value; this["AmmoMainColor"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("#FF26F600")] [global::System.Configuration.DefaultSettingValueAttribute("#FF26F600")]
public global::System.Windows.Media.Color AmmoSecondaryColor { public global::System.Windows.Media.Color AmmoSecondaryColor {
get { get {
return ((global::System.Windows.Media.Color)(this["AmmoSecondaryColor"])); return ((global::System.Windows.Media.Color)(this["AmmoSecondaryColor"]));
} }
set { set {
this["AmmoSecondaryColor"] = value; this["AmmoSecondaryColor"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool TeamColorEnabled { public bool TeamColorEnabled {
get { get {
return ((bool)(this["TeamColorEnabled"])); return ((bool)(this["TeamColorEnabled"]));
} }
set { set {
this["TeamColorEnabled"] = value; this["TeamColorEnabled"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool FlashEnabled { public bool FlashEnabled {
get { get {
return ((bool)(this["FlashEnabled"])); return ((bool)(this["FlashEnabled"]));
} }
set { set {
this["FlashEnabled"] = value; this["FlashEnabled"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool SmokeEnabled { public bool SmokeEnabled {
get { get {
return ((bool)(this["SmokeEnabled"])); return ((bool)(this["SmokeEnabled"]));
} }
set { set {
this["SmokeEnabled"] = value; this["SmokeEnabled"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool LowHpEnabled { public bool LowHpEnabled {
get { get {
return ((bool)(this["LowHpEnabled"])); return ((bool)(this["LowHpEnabled"]));
} }
set { set {
this["LowHpEnabled"] = value; this["LowHpEnabled"] = value;
} }
} }
} }
} }

View File

@ -1,35 +1,33 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Artemis.Modules.Games.CounterStrike" GeneratedClassName="CounterStrike">
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" <Profiles />
GeneratedClassNamespace="Artemis.Modules.Games.CounterStrike" GeneratedClassName="CounterStrike"> <Settings>
<Profiles /> <Setting Name="Enabled" Type="System.Boolean" Scope="User">
<Settings> <Value Profile="(Default)">True</Value>
<Setting Name="Enabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> <Setting Name="GameDirectory" Type="System.String" Scope="User">
</Setting> <Value Profile="(Default)" />
<Setting Name="GameDirectory" Type="System.String" Scope="User"> </Setting>
<Value Profile="(Default)" /> <Setting Name="AmmoEnabled" Type="System.Boolean" Scope="User">
</Setting> <Value Profile="(Default)">True</Value>
<Setting Name="AmmoEnabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> <Setting Name="AmmoMainColor" Type="System.Windows.Media.Color" Scope="User">
</Setting> <Value Profile="(Default)">#FFFF2900</Value>
<Setting Name="AmmoMainColor" Type="System.Windows.Media.Color" Scope="User"> </Setting>
<Value Profile="(Default)">#FFFF2900</Value> <Setting Name="AmmoSecondaryColor" Type="System.Windows.Media.Color" Scope="User">
</Setting> <Value Profile="(Default)">#FF26F600</Value>
<Setting Name="AmmoSecondaryColor" Type="System.Windows.Media.Color" Scope="User"> </Setting>
<Value Profile="(Default)">#FF26F600</Value> <Setting Name="TeamColorEnabled" Type="System.Boolean" Scope="User">
</Setting> <Value Profile="(Default)">True</Value>
<Setting Name="TeamColorEnabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> <Setting Name="FlashEnabled" Type="System.Boolean" Scope="User">
</Setting> <Value Profile="(Default)">True</Value>
<Setting Name="FlashEnabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> <Setting Name="SmokeEnabled" Type="System.Boolean" Scope="User">
</Setting> <Value Profile="(Default)">True</Value>
<Setting Name="SmokeEnabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> <Setting Name="LowHpEnabled" Type="System.Boolean" Scope="User">
</Setting> <Value Profile="(Default)">True</Value>
<Setting Name="LowHpEnabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> </Settings>
</Setting>
</Settings>
</SettingsFile> </SettingsFile>

View File

@ -4,8 +4,7 @@ using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Linq; using System.Linq;
using Artemis.KeyboardProviders; using Artemis.KeyboardProviders;
using Artemis.KeyboardProviders.Corsair; using Artemis.Managers;
using Artemis.KeyboardProviders.Logitech;
using Artemis.Models; using Artemis.Models;
using Artemis.Utilities; using Artemis.Utilities;
using Artemis.Utilities.GameState; using Artemis.Utilities.GameState;
@ -19,7 +18,7 @@ namespace Artemis.Modules.Games.CounterStrike
{ {
private KeyboardRegion _topRow; private KeyboardRegion _topRow;
public CounterStrikeModel(MainModel mainModel, CounterStrikeSettings settings) : base(mainModel) public CounterStrikeModel(MainManager mainManager, CounterStrikeSettings settings) : base(mainManager)
{ {
Settings = settings; Settings = settings;
Name = "CounterStrike"; Name = "CounterStrike";
@ -42,20 +41,29 @@ namespace Artemis.Modules.Games.CounterStrike
public override void Dispose() public override void Dispose()
{ {
MainModel.GameStateWebServer.GameDataReceived -= HandleGameData; MainManager.GameStateWebServer.GameDataReceived -= HandleGameData;
} }
public override void Enable() public override void Enable()
{ {
// Some keyboards have a different baseline, Corsair F-keys start at row 1 // Some keyboards have a different baseline, Corsair F-keys start at row 1
_topRow = MainModel.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "TopRow"); _topRow = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "TopRow");
AmmoRect = new KeyboardRectangle(MainModel.ActiveKeyboard, 0, _topRow.TopLeft.X, new List<Color>(), AmmoRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, _topRow.TopLeft.X,
new List<Color>(),
LinearGradientMode.Horizontal) {Height = Scale, ContainedBrush = false}; LinearGradientMode.Horizontal) {Height = Scale, ContainedBrush = false};
TeamRect = new KeyboardRectangle(MainModel.ActiveKeyboard, 0, _topRow.TopLeft.X + 1, new List<Color>(), TeamRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, _topRow.TopLeft.X + 1,
LinearGradientMode.Horizontal) {Height = MainModel.ActiveKeyboard.Height*Scale - Scale}; new List<Color>(),
EventRect = new KeyboardRectangle(MainModel.ActiveKeyboard, 0, _topRow.TopLeft.X + 1, new List<Color>(), LinearGradientMode.Horizontal)
LinearGradientMode.Horizontal) {Height = MainModel.ActiveKeyboard.Height*Scale - Scale}; {
MainModel.GameStateWebServer.GameDataReceived += HandleGameData; Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale - Scale
};
EventRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, _topRow.TopLeft.X + 1,
new List<Color>(),
LinearGradientMode.Horizontal)
{
Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale - Scale
};
MainManager.GameStateWebServer.GameDataReceived += HandleGameData;
} }
public override void Update() public override void Update()
@ -152,7 +160,7 @@ namespace Artemis.Modules.Games.CounterStrike
return; return;
var ammoPercentage = (int) Math.Ceiling(100.00/maxAmmo)*ammo; var ammoPercentage = (int) Math.Ceiling(100.00/maxAmmo)*ammo;
AmmoRect.Width = (int) Math.Floor(_topRow.BottomRight.Y / 100.00*ammoPercentage)*Scale; AmmoRect.Width = (int) Math.Floor(_topRow.BottomRight.Y/100.00*ammoPercentage)*Scale;
AmmoRect.Colors = new List<Color> AmmoRect.Colors = new List<Color>
{ {
ColorHelpers.ToDrawingColor(Settings.AmmoMainColor), ColorHelpers.ToDrawingColor(Settings.AmmoMainColor),
@ -168,7 +176,7 @@ namespace Artemis.Modules.Games.CounterStrike
public override Bitmap GenerateBitmap() public override Bitmap GenerateBitmap()
{ {
var bitmap = MainModel.ActiveKeyboard.KeyboardBitmap(Scale); var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap)) using (var g = Graphics.FromImage(bitmap))
{ {

View File

@ -1,6 +1,6 @@
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.Models; using Artemis.Managers;
using Artemis.Properties; using Artemis.Properties;
using Screen = Caliburn.Micro.Screen; using Screen = Caliburn.Micro.Screen;
@ -10,16 +10,16 @@ namespace Artemis.Modules.Games.CounterStrike
{ {
private CounterStrikeSettings _counterStrikeSettings; private CounterStrikeSettings _counterStrikeSettings;
public CounterStrikeViewModel(MainModel mainModel) public CounterStrikeViewModel(MainManager mainManager)
{ {
MainModel = mainModel; MainManager = mainManager;
// Settings are loaded from file by class // Settings are loaded from file by class
CounterStrikeSettings = new CounterStrikeSettings(); CounterStrikeSettings = new CounterStrikeSettings();
// Create effect model and add it to MainModel // Create effect model and add it to MainManager
CounterStrikeModel = new CounterStrikeModel(mainModel, CounterStrikeSettings); CounterStrikeModel = new CounterStrikeModel(mainManager, CounterStrikeSettings);
MainModel.EffectModels.Add(CounterStrikeModel); MainManager.EffectManager.EffectModels.Add(CounterStrikeModel);
PlaceConfigFile(); PlaceConfigFile();
} }
@ -36,7 +36,7 @@ namespace Artemis.Modules.Games.CounterStrike
public CounterStrikeModel CounterStrikeModel { get; set; } public CounterStrikeModel CounterStrikeModel { get; set; }
public MainModel MainModel { get; set; } public MainManager MainManager { get; set; }
public static string Name => "CS:GO"; public static string Name => "CS:GO";
public string Content => "Counter-Strike: GO Content"; public string Content => "Counter-Strike: GO Content";
@ -79,7 +79,7 @@ namespace Artemis.Modules.Games.CounterStrike
if (Directory.Exists(CounterStrikeSettings.GameDirectory + "/csgo/cfg")) if (Directory.Exists(CounterStrikeSettings.GameDirectory + "/csgo/cfg"))
{ {
var cfgFile = Resources.gamestateConfiguration.Replace("{{port}}", var cfgFile = Resources.gamestateConfiguration.Replace("{{port}}",
MainModel.GameStateWebServer.Port.ToString()); MainManager.GameStateWebServer.Port.ToString());
File.WriteAllText(CounterStrikeSettings.GameDirectory + "/csgo/cfg/gamestate_integration_artemis.cfg", File.WriteAllText(CounterStrikeSettings.GameDirectory + "/csgo/cfg/gamestate_integration_artemis.cfg",
cfgFile); cfgFile);
return; return;

View File

@ -1,16 +1,16 @@
using Artemis.Models; using Artemis.Managers;
using Caliburn.Micro; using Caliburn.Micro;
namespace Artemis.Modules.Games.Dota2 namespace Artemis.Modules.Games.Dota2
{ {
public class Dota2ViewModel : Screen public class Dota2ViewModel : Screen
{ {
public Dota2ViewModel(MainModel mainModel) public Dota2ViewModel(MainManager mainManager)
{ {
MainModel = mainModel; MainManager = mainManager;
} }
public MainModel MainModel { get; set; } public MainManager MainManager { get; set; }
public static string Name => "Dota 2 (NYI)"; public static string Name => "Dota 2 (NYI)";
public string Content => "Dota 2 Content"; public string Content => "Dota 2 Content";

View File

@ -1,62 +1,62 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.42000 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace Artemis.Modules.Games.RocketLeague { namespace Artemis.Modules.Games.RocketLeague {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class RocketLeague : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class RocketLeague : global::System.Configuration.ApplicationSettingsBase {
private static RocketLeague defaultInstance = ((RocketLeague)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new RocketLeague()))); private static RocketLeague defaultInstance = ((RocketLeague)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new RocketLeague())));
public static RocketLeague Default { public static RocketLeague Default {
get { get {
return defaultInstance; return defaultInstance;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool Enabled { public bool Enabled {
get { get {
return ((bool)(this["Enabled"])); return ((bool)(this["Enabled"]));
} }
set { set {
this["Enabled"] = value; this["Enabled"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("#FFFF5000")] [global::System.Configuration.DefaultSettingValueAttribute("#FFFF5000")]
public global::System.Windows.Media.Color MainColor { public global::System.Windows.Media.Color MainColor {
get { get {
return ((global::System.Windows.Media.Color)(this["MainColor"])); return ((global::System.Windows.Media.Color)(this["MainColor"]));
} }
set { set {
this["MainColor"] = value; this["MainColor"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("#FFFF0000")] [global::System.Configuration.DefaultSettingValueAttribute("#FFFF0000")]
public global::System.Windows.Media.Color SecondaryColor { public global::System.Windows.Media.Color SecondaryColor {
get { get {
return ((global::System.Windows.Media.Color)(this["SecondaryColor"])); return ((global::System.Windows.Media.Color)(this["SecondaryColor"]));
} }
set { set {
this["SecondaryColor"] = value; this["SecondaryColor"] = value;
} }
} }
} }
} }

View File

@ -1,17 +1,15 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Artemis.Modules.Games.RocketLeague" GeneratedClassName="RocketLeague">
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" <Profiles />
GeneratedClassNamespace="Artemis.Modules.Games.RocketLeague" GeneratedClassName="RocketLeague"> <Settings>
<Profiles /> <Setting Name="Enabled" Type="System.Boolean" Scope="User">
<Settings> <Value Profile="(Default)">True</Value>
<Setting Name="Enabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> <Setting Name="MainColor" Type="System.Windows.Media.Color" Scope="User">
</Setting> <Value Profile="(Default)">#FFFF5000</Value>
<Setting Name="MainColor" Type="System.Windows.Media.Color" Scope="User"> </Setting>
<Value Profile="(Default)">#FFFF5000</Value> <Setting Name="SecondaryColor" Type="System.Windows.Media.Color" Scope="User">
</Setting> <Value Profile="(Default)">#FFFF0000</Value>
<Setting Name="SecondaryColor" Type="System.Windows.Media.Color" Scope="User"> </Setting>
<Value Profile="(Default)">#FFFF0000</Value> </Settings>
</Setting>
</Settings>
</SettingsFile> </SettingsFile>

View File

@ -5,6 +5,7 @@ using System.Drawing.Drawing2D;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
using Artemis.Settings; using Artemis.Settings;
using Artemis.Utilities; using Artemis.Utilities;
@ -23,7 +24,7 @@ namespace Artemis.Modules.Games.RocketLeague
private GamePointersCollectionModel _pointer; private GamePointersCollectionModel _pointer;
private int _previousBoost; private int _previousBoost;
public RocketLeagueModel(MainModel mainModel, RocketLeagueSettings settings) : base(mainModel) public RocketLeagueModel(MainManager mainManager, RocketLeagueSettings settings) : base(mainManager)
{ {
Settings = settings; Settings = settings;
Name = "RocketLeague"; Name = "RocketLeague";
@ -43,7 +44,7 @@ namespace Artemis.Modules.Games.RocketLeague
public override void Enable() public override void Enable()
{ {
_boostRect = new KeyboardRectangle(MainModel.ActiveKeyboard, 0, 0, new List<Color> _boostRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>
{ {
ColorHelpers.ToDrawingColor(Settings.MainColor), ColorHelpers.ToDrawingColor(Settings.MainColor),
ColorHelpers.ToDrawingColor(Settings.SecondaryColor) ColorHelpers.ToDrawingColor(Settings.SecondaryColor)
@ -91,7 +92,8 @@ namespace Artemis.Modules.Games.RocketLeague
if (_boostAmount > 100) if (_boostAmount > 100)
_boostAmount = 100; _boostAmount = 100;
_boostRect.Width = (int) Math.Ceiling(MainModel.ActiveKeyboard.Width*Scale/100.00*_boostAmount); _boostRect.Width =
(int) Math.Ceiling(MainManager.KeyboardManager.ActiveKeyboard.Width*Scale/100.00*_boostAmount);
_boostRect.Colors = new List<Color> _boostRect.Colors = new List<Color>
{ {
ColorHelpers.ToDrawingColor(Settings.MainColor), ColorHelpers.ToDrawingColor(Settings.MainColor),
@ -113,7 +115,8 @@ namespace Artemis.Modules.Games.RocketLeague
var differenceStep = difference/amountOfSteps; var differenceStep = difference/amountOfSteps;
var differenceStepRest = difference%amountOfSteps; var differenceStepRest = difference%amountOfSteps;
_boostAmount = _previousBoost; _boostAmount = _previousBoost;
_boostRect.Width = (int) Math.Ceiling(MainModel.ActiveKeyboard.Width*Scale/100.00*_boostAmount); _boostRect.Width =
(int) Math.Ceiling(MainManager.KeyboardManager.ActiveKeyboard.Width*Scale/100.00*_boostAmount);
for (var i = 0; i < amountOfSteps; i++) for (var i = 0; i < amountOfSteps; i++)
{ {
@ -121,10 +124,12 @@ namespace Artemis.Modules.Games.RocketLeague
{ {
differenceStepRest -= 1; differenceStepRest -= 1;
_boostAmount += 1; _boostAmount += 1;
_boostRect.Width = (int) Math.Ceiling(MainModel.ActiveKeyboard.Width*Scale/100.00*_boostAmount); _boostRect.Width =
(int) Math.Ceiling(MainManager.KeyboardManager.ActiveKeyboard.Width*Scale/100.00*_boostAmount);
} }
_boostAmount += differenceStep; _boostAmount += differenceStep;
_boostRect.Width = (int) Math.Ceiling(MainModel.ActiveKeyboard.Width*Scale/100.00*_boostAmount); _boostRect.Width =
(int) Math.Ceiling(MainManager.KeyboardManager.ActiveKeyboard.Width*Scale/100.00*_boostAmount);
Thread.Sleep(50); Thread.Sleep(50);
} }
@ -134,7 +139,7 @@ namespace Artemis.Modules.Games.RocketLeague
public override Bitmap GenerateBitmap() public override Bitmap GenerateBitmap()
{ {
var bitmap = MainModel.ActiveKeyboard.KeyboardBitmap(Scale); var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
if (_boostRect == null) if (_boostRect == null)
return null; return null;

View File

@ -1,4 +1,4 @@
using Artemis.Models; using Artemis.Managers;
using Caliburn.Micro; using Caliburn.Micro;
namespace Artemis.Modules.Games.RocketLeague namespace Artemis.Modules.Games.RocketLeague
@ -7,21 +7,21 @@ namespace Artemis.Modules.Games.RocketLeague
{ {
private RocketLeagueSettings _rocketLeagueSettings; private RocketLeagueSettings _rocketLeagueSettings;
public RocketLeagueViewModel(MainModel mainModel) public RocketLeagueViewModel(MainManager mainManager)
{ {
MainModel = mainModel; MainManager = mainManager;
// Settings are loaded from file by class // Settings are loaded from file by class
RocketLeagueSettings = new RocketLeagueSettings(); RocketLeagueSettings = new RocketLeagueSettings();
// Create effect model and add it to MainModel // Create effect model and add it to MainManager
RocketLeagueModel = new RocketLeagueModel(mainModel, RocketLeagueSettings); RocketLeagueModel = new RocketLeagueModel(mainManager, RocketLeagueSettings);
MainModel.EffectModels.Add(RocketLeagueModel); MainManager.EffectManager.EffectModels.Add(RocketLeagueModel);
} }
public static string Name => "Rocket League"; public static string Name => "Rocket League";
public MainModel MainModel { get; set; } public MainManager MainManager { get; set; }
public RocketLeagueModel RocketLeagueModel { get; set; } public RocketLeagueModel RocketLeagueModel { get; set; }
public RocketLeagueSettings RocketLeagueSettings public RocketLeagueSettings RocketLeagueSettings

View File

@ -1,38 +1,38 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.42000 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace Artemis.Modules.Games.Witcher3 { namespace Artemis.Modules.Games.Witcher3 {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class Witcher3 : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class Witcher3 : global::System.Configuration.ApplicationSettingsBase {
private static Witcher3 defaultInstance = ((Witcher3)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Witcher3()))); private static Witcher3 defaultInstance = ((Witcher3)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Witcher3())));
public static Witcher3 Default { public static Witcher3 Default {
get { get {
return defaultInstance; return defaultInstance;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool Enabled { public bool Enabled {
get { get {
return ((bool)(this["Enabled"])); return ((bool)(this["Enabled"]));
} }
set { set {
this["Enabled"] = value; this["Enabled"] = value;
} }
} }
} }
} }

View File

@ -1,11 +1,9 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Artemis.Modules.Games.Witcher3" GeneratedClassName="Witcher3">
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" <Profiles />
GeneratedClassNamespace="Artemis.Modules.Games.Witcher3" GeneratedClassName="Witcher3"> <Settings>
<Profiles /> <Setting Name="Enabled" Type="System.Boolean" Scope="User">
<Settings> <Value Profile="(Default)">True</Value>
<Setting Name="Enabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> </Settings>
</Setting>
</Settings>
</SettingsFile> </SettingsFile>

View File

@ -5,6 +5,7 @@ using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.IO; using System.IO;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
using Artemis.Utilities.Keyboard; using Artemis.Utilities.Keyboard;
@ -17,7 +18,7 @@ namespace Artemis.Modules.Games.Witcher3
private KeyboardRectangle _signRect; private KeyboardRectangle _signRect;
private string _witcherSettings; private string _witcherSettings;
public Witcher3Model(MainModel mainModel, Witcher3Settings settings) : base(mainModel) public Witcher3Model(MainManager mainManager, Witcher3Settings settings) : base(mainManager)
{ {
Settings = settings; Settings = settings;
Name = "Witcher3"; Name = "Witcher3";
@ -42,7 +43,7 @@ namespace Artemis.Modules.Games.Witcher3
public override void Enable() public override void Enable()
{ {
_signRect = new KeyboardRectangle(MainModel.ActiveKeyboard, 0, 0, new List<Color>(), _signRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>(),
LinearGradientMode.Horizontal) LinearGradientMode.Horizontal)
{ {
Rotate = true, Rotate = true,
@ -102,7 +103,7 @@ namespace Artemis.Modules.Games.Witcher3
public override Bitmap GenerateBitmap() public override Bitmap GenerateBitmap()
{ {
var bitmap = MainModel.ActiveKeyboard.KeyboardBitmap(Scale); var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale);
using (var g = Graphics.FromImage(bitmap)) using (var g = Graphics.FromImage(bitmap))
{ {
g.Clear(Color.Transparent); g.Clear(Color.Transparent);

View File

@ -3,7 +3,7 @@ using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.Models; using Artemis.Managers;
using Artemis.Properties; using Artemis.Properties;
using Screen = Caliburn.Micro.Screen; using Screen = Caliburn.Micro.Screen;
@ -13,21 +13,21 @@ namespace Artemis.Modules.Games.Witcher3
{ {
private Witcher3Settings _witcher3Settings; private Witcher3Settings _witcher3Settings;
public Witcher3ViewModel(MainModel mainModel) public Witcher3ViewModel(MainManager mainManager)
{ {
MainModel = mainModel; MainManager = mainManager;
// Settings are loaded from file by class // Settings are loaded from file by class
Witcher3Settings = new Witcher3Settings(); Witcher3Settings = new Witcher3Settings();
// Create effect model and add it to MainModel // Create effect model and add it to MainManager
Witcher3Model = new Witcher3Model(mainModel, Witcher3Settings); Witcher3Model = new Witcher3Model(mainManager, Witcher3Settings);
MainModel.EffectModels.Add(Witcher3Model); MainManager.EffectManager.EffectModels.Add(Witcher3Model);
} }
public static string Name => "The Witcher 3"; public static string Name => "The Witcher 3";
public MainModel MainModel { get; set; } public MainManager MainManager { get; set; }
public Witcher3Model Witcher3Model { get; set; } public Witcher3Model Witcher3Model { get; set; }
public Witcher3Settings Witcher3Settings public Witcher3Settings Witcher3Settings
@ -115,8 +115,11 @@ namespace Artemis.Modules.Games.Witcher3
Directory.CreateDirectory(folder + @"\Witcher3\bin\config\r4game\user_config_matrix\pc"); Directory.CreateDirectory(folder + @"\Witcher3\bin\config\r4game\user_config_matrix\pc");
// Install the mod files // Install the mod files
File.WriteAllText(folder + @"\Witcher3\bin\config\r4game\user_config_matrix\pc\artemis.xml",Resources.artemisXml); File.WriteAllText(folder + @"\Witcher3\bin\config\r4game\user_config_matrix\pc\artemis.xml",
File.WriteAllText(folder + @"\Witcher3\mods\modArtemis\content\scripts\game\player\playerWitcher.ws",Resources.playerWitcherWs); Resources.artemisXml);
File.WriteAllText(
folder + @"\Witcher3\mods\modArtemis\content\scripts\game\player\playerWitcher.ws",
Resources.playerWitcherWs);
Process.Start(new ProcessStartInfo("https://github.com/SpoinkyNL/Artemis/wiki/The-Witcher-3")); Process.Start(new ProcessStartInfo("https://github.com/SpoinkyNL/Artemis/wiki/The-Witcher-3"));

View File

@ -1,62 +1,62 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.42000 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace Artemis.Settings { namespace Artemis.Modules.Overlays.VolumeDisplay {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class VolumeDisplay : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class VolumeDisplay : global::System.Configuration.ApplicationSettingsBase {
private static VolumeDisplay defaultInstance = ((VolumeDisplay)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new VolumeDisplay()))); private static VolumeDisplay defaultInstance = ((VolumeDisplay)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new VolumeDisplay())));
public static VolumeDisplay Default { public static VolumeDisplay Default {
get { get {
return defaultInstance; return defaultInstance;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("#FFFF2900")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public global::System.Windows.Media.Color MainColor { public bool Enabled {
get { get {
return ((global::System.Windows.Media.Color)(this["MainColor"])); return ((bool)(this["Enabled"]));
} }
set { set {
this["MainColor"] = value; this["Enabled"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("#FF26F600")] [global::System.Configuration.DefaultSettingValueAttribute("#FFFF2900")]
public global::System.Windows.Media.Color SecondaryColor { public global::System.Windows.Media.Color MainColor {
get { get {
return ((global::System.Windows.Media.Color)(this["SecondaryColor"])); return ((global::System.Windows.Media.Color)(this["MainColor"]));
} }
set { set {
this["SecondaryColor"] = value; this["MainColor"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("#FF26F600")]
public bool Enabled { public global::System.Windows.Media.Color SecondaryColor {
get { get {
return ((bool)(this["Enabled"])); return ((global::System.Windows.Media.Color)(this["SecondaryColor"]));
} }
set { set {
this["Enabled"] = value; this["SecondaryColor"] = value;
} }
} }
} }
} }

View File

@ -1,23 +1,23 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using Artemis.Models; using Artemis.Managers;
using Artemis.Utilities; using Artemis.Utilities;
using Artemis.Utilities.Keyboard; using Artemis.Utilities.Keyboard;
namespace Artemis.Modules.Overlays.VolumeDisplay namespace Artemis.Modules.Overlays.VolumeDisplay
{ {
public class VolumeDisplay public class VolumeBar
{ {
public VolumeDisplay(MainModel mainModel, VolumeDisplaySettings settings) public VolumeBar(MainManager mainManager, VolumeDisplaySettings settings)
{ {
MainModel = mainModel; MainManager = mainManager;
Settings = settings; Settings = settings;
Transparancy = 255; Transparancy = 255;
Scale = 4; Scale = 4;
} }
public MainModel MainModel { get; set; } public MainManager MainManager { get; set; }
public VolumeDisplaySettings Settings { get; set; } public VolumeDisplaySettings Settings { get; set; }
@ -30,14 +30,14 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
public void Draw(Graphics g) public void Draw(Graphics g)
{ {
var volumeRect = new KeyboardRectangle(MainModel.ActiveKeyboard, 0, 0, new List<Color> var volumeRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List<Color>
{ {
ColorHelpers.ToDrawingColor(Settings.SecondaryColor), ColorHelpers.ToDrawingColor(Settings.SecondaryColor),
ColorHelpers.ToDrawingColor(Settings.MainColor) ColorHelpers.ToDrawingColor(Settings.MainColor)
}, },
LinearGradientMode.Horizontal) LinearGradientMode.Horizontal)
{ {
Width = (int) (MainModel.ActiveKeyboard.Width*Scale/100.00*Volume), Width = (int) (MainManager.KeyboardManager.ActiveKeyboard.Width*Scale/100.00*Volume),
ContainedBrush = false ContainedBrush = false
}; };
volumeRect.Draw(g); volumeRect.Draw(g);

View File

@ -1,17 +1,15 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Artemis.Modules.Overlays.VolumeDisplay" GeneratedClassName="VolumeDisplay">
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" <Profiles />
GeneratedClassNamespace="Artemis.Settings" GeneratedClassName="VolumeDisplay"> <Settings>
<Profiles /> <Setting Name="Enabled" Type="System.Boolean" Scope="User">
<Settings> <Value Profile="(Default)">True</Value>
<Setting Name="MainColor" Type="System.Windows.Media.Color" Scope="User"> </Setting>
<Value Profile="(Default)">#FFFF2900</Value> <Setting Name="MainColor" Type="System.Windows.Media.Color" Scope="User">
</Setting> <Value Profile="(Default)">#FFFF2900</Value>
<Setting Name="SecondaryColor" Type="System.Windows.Media.Color" Scope="User"> </Setting>
<Value Profile="(Default)">#FF26F600</Value> <Setting Name="SecondaryColor" Type="System.Windows.Media.Color" Scope="User">
</Setting> <Value Profile="(Default)">#FF26F600</Value>
<Setting Name="Enabled" Type="System.Boolean" Scope="User"> </Setting>
<Value Profile="(Default)">True</Value> </Settings>
</Setting>
</Settings>
</SettingsFile> </SettingsFile>

View File

@ -2,6 +2,7 @@
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
using NAudio.CoreAudioApi; using NAudio.CoreAudioApi;
@ -9,28 +10,28 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
{ {
public class VolumeDisplayModel : OverlayModel public class VolumeDisplayModel : OverlayModel
{ {
public VolumeDisplayModel(MainModel mainModel, VolumeDisplaySettings settings) : base(mainModel) public VolumeDisplayModel(MainManager mainManager, VolumeDisplaySettings settings) : base(mainManager)
{ {
Settings = settings; Settings = settings;
Name = "VolumeDisplay"; Name = "VolumeDisplay";
Enabled = Settings.Enabled; Enabled = Settings.Enabled;
VolumeDisplay = new VolumeDisplay(mainModel, settings); VolumeDisplay = new VolumeBar(mainManager, settings);
} }
public VolumeDisplay VolumeDisplay { get; set; } public VolumeBar VolumeDisplay { get; set; }
public VolumeDisplaySettings Settings { get; set; } public VolumeDisplaySettings Settings { get; set; }
public override void Dispose() public override void Dispose()
{ {
MainModel.KeyboardHook.Unsubscribe(HandleKeypress); MainManager.KeyboardHook.Unsubscribe(HandleKeypress);
} }
public override void Enable() public override void Enable()
{ {
// Listener won't start unless the effect is active // Listener won't start unless the effect is active
MainModel.KeyboardHook.Subscribe(HandleKeypress); MainManager.KeyboardHook.Subscribe(HandleKeypress);
} }
public override void Update() public override void Update()
@ -63,7 +64,7 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
public override Bitmap GenerateBitmap() public override Bitmap GenerateBitmap()
{ {
return GenerateBitmap(MainModel.ActiveKeyboard.KeyboardBitmap(4)); return GenerateBitmap(MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(4));
} }
public override Bitmap GenerateBitmap(Bitmap bitmap) public override Bitmap GenerateBitmap(Bitmap bitmap)

View File

@ -16,18 +16,18 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
public sealed override void Load() public sealed override void Load()
{ {
Enabled = Settings.VolumeDisplay.Default.Enabled; Enabled = VolumeDisplay.Default.Enabled;
MainColor = Settings.VolumeDisplay.Default.MainColor; MainColor = VolumeDisplay.Default.MainColor;
SecondaryColor = Settings.VolumeDisplay.Default.SecondaryColor; SecondaryColor = VolumeDisplay.Default.SecondaryColor;
} }
public sealed override void Save() public sealed override void Save()
{ {
Settings.VolumeDisplay.Default.Enabled = Enabled; VolumeDisplay.Default.Enabled = Enabled;
Settings.VolumeDisplay.Default.MainColor = MainColor; VolumeDisplay.Default.MainColor = MainColor;
Settings.VolumeDisplay.Default.SecondaryColor = SecondaryColor; VolumeDisplay.Default.SecondaryColor = SecondaryColor;
Settings.VolumeDisplay.Default.Save(); VolumeDisplay.Default.Save();
} }
public sealed override void ToDefault() public sealed override void ToDefault()

View File

@ -1,4 +1,4 @@
using Artemis.Models; using Artemis.Managers;
using Caliburn.Micro; using Caliburn.Micro;
namespace Artemis.Modules.Overlays.VolumeDisplay namespace Artemis.Modules.Overlays.VolumeDisplay
@ -7,21 +7,21 @@ namespace Artemis.Modules.Overlays.VolumeDisplay
{ {
private VolumeDisplaySettings _volumeDisplaySettings; private VolumeDisplaySettings _volumeDisplaySettings;
public VolumeDisplayViewModel(MainModel mainModel) public VolumeDisplayViewModel(MainManager mainManager)
{ {
MainModel = mainModel; MainManager = mainManager;
// Settings are loaded from file by class // Settings are loaded from file by class
VolumeDisplaySettings = new VolumeDisplaySettings(); VolumeDisplaySettings = new VolumeDisplaySettings();
// Create effect model and add it to MainModel // Create effect model and add it to MainManager
VolumeDisplayModel = new VolumeDisplayModel(mainModel, VolumeDisplaySettings); VolumeDisplayModel = new VolumeDisplayModel(mainManager, VolumeDisplaySettings);
MainModel.EffectModels.Add(VolumeDisplayModel); MainManager.EffectManager.EffectModels.Add(VolumeDisplayModel);
} }
public static string Name => "Volume Display"; public static string Name => "Volume Display";
public MainModel MainModel { get; set; } public MainManager MainManager { get; set; }
public VolumeDisplayModel VolumeDisplayModel { get; set; } public VolumeDisplayModel VolumeDisplayModel { get; set; }
public VolumeDisplaySettings VolumeDisplaySettings public VolumeDisplaySettings VolumeDisplaySettings

View File

@ -18,8 +18,8 @@ namespace Artemis.Utilities.Memory
public static Process GetProcessIfRunning(string processName) public static Process GetProcessIfRunning(string processName)
{ {
var rlProcess = Process.GetProcessesByName(processName); var processes = Process.GetProcessesByName(processName);
return rlProcess.Length >= 1 ? rlProcess[0] : null; return processes.Length >= 1 ? processes[0] : null;
} }
public static IntPtr FindAddress(IntPtr pHandle, IntPtr baseAddress, IntPtr staticPointer, int[] offsets) public static IntPtr FindAddress(IntPtr pHandle, IntPtr baseAddress, IntPtr staticPointer, int[] offsets)

View File

@ -0,0 +1,49 @@
using Artemis.Managers;
using Artemis.Models;
using Caliburn.Micro;
namespace Artemis.ViewModels.Abstract
{
public abstract class EffectViewModel : Screen
{
private EffectSettings _effectSettings;
public EffectModel EffectModel { get; set; }
public MainManager MainManager { get; set; }
public EffectSettings EffectSettings
{
get { return _effectSettings; }
set
{
if (Equals(value, _effectSettings)) return;
_effectSettings = value;
NotifyOfPropertyChange(() => EffectSettings);
}
}
public bool EffectEnabled => MainManager.EffectManager.ActiveEffect == EffectModel;
public void ToggleEffect()
{
if (EffectEnabled)
MainManager.EffectManager.ClearEffect();
else
MainManager.EffectManager.ChangeEffect(EffectModel);
}
public void SaveSettings()
{
EffectSettings?.Save();
}
public void ResetSettings()
{
// TODO: Confirmation dialog (Generic MVVM approach)
EffectSettings.ToDefault();
NotifyOfPropertyChange(() => EffectSettings);
SaveSettings();
}
}
}

View File

@ -1,4 +1,4 @@
using Artemis.Models; using Artemis.Managers;
using Artemis.Modules.Effects.AudioVisualizer; using Artemis.Modules.Effects.AudioVisualizer;
using Artemis.Modules.Effects.Debug; using Artemis.Modules.Effects.Debug;
using Artemis.Modules.Effects.TypeHole; using Artemis.Modules.Effects.TypeHole;
@ -14,12 +14,12 @@ namespace Artemis.ViewModels
private readonly TypeHoleViewModel _typeHoleVm; private readonly TypeHoleViewModel _typeHoleVm;
private readonly TypeWaveViewModel _typeWaveVm; private readonly TypeWaveViewModel _typeWaveVm;
public EffectsViewModel(MainModel mainModel) public EffectsViewModel(MainManager mainManager)
{ {
_typeWaveVm = new TypeWaveViewModel(mainModel) {DisplayName = "Type Waves"}; _typeWaveVm = new TypeWaveViewModel(mainManager) {DisplayName = "Type Waves"};
//_typeHoleVm = new TypeHoleViewModel(mainModel) {DisplayName = "Type Holes (NYI)"}; //_typeHoleVm = new TypeHoleViewModel(MainManager) {DisplayName = "Type Holes (NYI)"};
_audioVisualizerVm = new AudioVisualizerViewModel(mainModel) {DisplayName = "Audio Visualization"}; _audioVisualizerVm = new AudioVisualizerViewModel(mainManager) {DisplayName = "Audio Visualization"};
_debugVm = new DebugEffectViewModel(mainModel) {DisplayName = "Debug Effect"}; _debugVm = new DebugEffectViewModel(mainManager) {DisplayName = "Debug Effect"};
} }
protected override void OnActivate() protected override void OnActivate()

View File

@ -1,7 +1,7 @@
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using Artemis.Events; using Artemis.Events;
using Artemis.Models; using Artemis.Managers;
using Artemis.Settings; using Artemis.Settings;
using Caliburn.Micro; using Caliburn.Micro;
using MahApps.Metro.Controls; using MahApps.Metro.Controls;
@ -14,14 +14,14 @@ namespace Artemis.ViewModels.Flyouts
private GeneralSettings _generalSettings; private GeneralSettings _generalSettings;
private string _selectedKeyboardProvider; private string _selectedKeyboardProvider;
public FlyoutSettingsViewModel(MainModel mainModel) public FlyoutSettingsViewModel(MainManager mainManager)
{ {
MainModel = mainModel; MainManager = mainManager;
Header = "settings"; Header = "Settings";
Position = Position.Right; Position = Position.Right;
GeneralSettings = new GeneralSettings(); GeneralSettings = new GeneralSettings();
MainModel.Events.Subscribe(this); MainManager.Events.Subscribe(this);
} }
public GeneralSettings GeneralSettings public GeneralSettings GeneralSettings
@ -35,10 +35,10 @@ namespace Artemis.ViewModels.Flyouts
} }
} }
public MainModel MainModel { get; set; } public MainManager MainManager { get; set; }
public BindableCollection<string> KeyboardProviders public BindableCollection<string> KeyboardProviders
=> new BindableCollection<string>(MainModel.KeyboardProviders.Select(k => k.Name)); => new BindableCollection<string>(MainManager.KeyboardManager.KeyboardProviders.Select(k => k.Name));
public string SelectedKeyboardProvider public string SelectedKeyboardProvider
{ {
@ -51,7 +51,8 @@ namespace Artemis.ViewModels.Flyouts
if (value == null) if (value == null)
return; return;
MainModel.ChangeKeyboard(MainModel.KeyboardProviders.First(k => k.Name == _selectedKeyboardProvider)); MainManager.KeyboardManager.ChangeKeyboard(
MainManager.KeyboardManager.KeyboardProviders.First(k => k.Name == _selectedKeyboardProvider));
} }
} }
@ -75,9 +76,11 @@ namespace Artemis.ViewModels.Flyouts
public void ToggleEnabled() public void ToggleEnabled()
{ {
if (Enabled) if (Enabled)
MainModel.ShutdownEffects(); MainManager.Stop();
else if (MainManager.EffectManager.ActiveEffect != null)
MainManager.Start();
else else
MainModel.StartEffects(); MainManager.Start(MainManager.EffectManager.GetLastEffect());
} }
public void ResetSettings() public void ResetSettings()
@ -98,7 +101,7 @@ namespace Artemis.ViewModels.Flyouts
protected override void HandleOpen() protected override void HandleOpen()
{ {
SelectedKeyboardProvider = MainModel.ActiveKeyboard?.Name; SelectedKeyboardProvider = MainManager.KeyboardManager.ActiveKeyboard?.Name;
} }
} }
} }

View File

@ -1,4 +1,4 @@
using Artemis.Models; using Artemis.Managers;
using Artemis.Modules.Games.CounterStrike; using Artemis.Modules.Games.CounterStrike;
using Artemis.Modules.Games.Dota2; using Artemis.Modules.Games.Dota2;
using Artemis.Modules.Games.RocketLeague; using Artemis.Modules.Games.RocketLeague;
@ -14,12 +14,12 @@ namespace Artemis.ViewModels
private readonly RocketLeagueViewModel _rocketLeagueVm; private readonly RocketLeagueViewModel _rocketLeagueVm;
private readonly Witcher3ViewModel _witcher3Vm; private readonly Witcher3ViewModel _witcher3Vm;
public GamesViewModel(MainModel mainModel) public GamesViewModel(MainManager mainManager)
{ {
_rocketLeagueVm = new RocketLeagueViewModel(mainModel) {DisplayName = "Rocket League"}; _rocketLeagueVm = new RocketLeagueViewModel(mainManager) {DisplayName = "Rocket League"};
_counterStrikeVm = new CounterStrikeViewModel(mainModel) {DisplayName = "CS:GO"}; _counterStrikeVm = new CounterStrikeViewModel(mainManager) {DisplayName = "CS:GO"};
//_dota2Vm = new Dota2ViewModel(mainModel) {DisplayName = "Dota 2 (NYI)"}; //_dota2Vm = new Dota2ViewModel(MainManager) {DisplayName = "Dota 2 (NYI)"};
_witcher3Vm = new Witcher3ViewModel(mainModel) {DisplayName = "The Witcher 3"}; _witcher3Vm = new Witcher3ViewModel(mainManager) {DisplayName = "The Witcher 3"};
} }
protected override void OnActivate() protected override void OnActivate()

View File

@ -1,4 +1,4 @@
using Artemis.Models; using Artemis.Managers;
using Artemis.Modules.Overlays.VolumeDisplay; using Artemis.Modules.Overlays.VolumeDisplay;
using Caliburn.Micro; using Caliburn.Micro;
@ -6,12 +6,12 @@ namespace Artemis.ViewModels
{ {
public class OverlaysViewModel : Conductor<IScreen>.Collection.OneActive public class OverlaysViewModel : Conductor<IScreen>.Collection.OneActive
{ {
private readonly MainModel _mainModel; private readonly MainManager _mainManager;
private VolumeDisplayViewModel _volumeDisplayVm; private VolumeDisplayViewModel _volumeDisplayVm;
public OverlaysViewModel(MainModel mainModel) public OverlaysViewModel(MainManager mainManager)
{ {
_mainModel = mainModel; _mainManager = mainManager;
} }
protected override void OnActivate() protected override void OnActivate()
@ -21,7 +21,7 @@ namespace Artemis.ViewModels
Items.Clear(); Items.Clear();
// This VM appears to be going out of scope, so recreating it every time just to be sure. // This VM appears to be going out of scope, so recreating it every time just to be sure.
_volumeDisplayVm = new VolumeDisplayViewModel(_mainModel) { DisplayName = "Volume Display" }; _volumeDisplayVm = new VolumeDisplayViewModel(_mainManager) {DisplayName = "Volume Display"};
ActivateItem(_volumeDisplayVm); ActivateItem(_volumeDisplayVm);
ActiveItem = _volumeDisplayVm; ActiveItem = _volumeDisplayVm;
} }

View File

@ -1,7 +1,7 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using Artemis.Models; using Artemis.Managers;
using Artemis.ViewModels.Flyouts; using Artemis.ViewModels.Flyouts;
using Caliburn.Micro; using Caliburn.Micro;
@ -17,21 +17,21 @@ namespace Artemis.ViewModels
public ShellViewModel() public ShellViewModel()
{ {
IEventAggregator events = new EventAggregator(); IEventAggregator events = new EventAggregator();
MainModel = new MainModel(events); MainManager = new MainManager(events);
DisplayName = "Artemis"; DisplayName = "Artemis";
_welcomeVm = new WelcomeViewModel {DisplayName = "Welcome"}; _welcomeVm = new WelcomeViewModel {DisplayName = "Welcome"};
_effectsVm = new EffectsViewModel(MainModel) {DisplayName = "Effects"}; _effectsVm = new EffectsViewModel(MainManager) {DisplayName = "Effects"};
_gamesVm = new GamesViewModel(MainModel) {DisplayName = "Games"}; _gamesVm = new GamesViewModel(MainManager) {DisplayName = "Games"};
_overlaysVm = new OverlaysViewModel(MainModel) {DisplayName = "Overlays"}; _overlaysVm = new OverlaysViewModel(MainManager) {DisplayName = "Overlays"};
Flyouts.Add(new FlyoutSettingsViewModel(MainModel)); Flyouts.Add(new FlyoutSettingsViewModel(MainManager));
} }
public IObservableCollection<FlyoutBaseViewModel> Flyouts { get; set; } = public IObservableCollection<FlyoutBaseViewModel> Flyouts { get; set; } =
new BindableCollection<FlyoutBaseViewModel>(); new BindableCollection<FlyoutBaseViewModel>();
public MainModel MainModel { get; set; } public MainManager MainManager { get; set; }
protected override void OnActivate() protected override void OnActivate()
{ {
@ -47,7 +47,7 @@ namespace Artemis.ViewModels
public void OnClose(EventArgs e) public void OnClose(EventArgs e)
{ {
MainModel.ShutdownEffects(); MainManager.Stop();
Application.Current.Shutdown(); Application.Current.Shutdown();
} }

View File

@ -24,14 +24,7 @@ namespace Artemis.ViewModels
{ {
_windowManager = windowManager; _windowManager = windowManager;
_shellViewModel = shellViewModel; _shellViewModel = shellViewModel;
_shellViewModel.MainModel.Events.Subscribe(this); _shellViewModel.MainManager.Events.Subscribe(this);
/*
* By now Effects are added to the MainModel so we can savely start
* This is done from here to make sure all UI elements listening to
* events will receive the first ToggleEnabled event
* */
_shellViewModel.MainModel.StartEffects();
// TODO: Check if show on startup is enabled, if so, show window. // TODO: Check if show on startup is enabled, if so, show window.
} }
@ -72,9 +65,9 @@ namespace Artemis.ViewModels
public void ToggleEnabled() public void ToggleEnabled()
{ {
if (Enabled) if (Enabled)
_shellViewModel.MainModel.ShutdownEffects(); _shellViewModel.MainManager.Stop();
else else
_shellViewModel.MainModel.StartEffects(); _shellViewModel.MainManager.Start();
} }
protected override void OnActivate() protected override void OnActivate()
@ -110,7 +103,7 @@ namespace Artemis.ViewModels
public void ExitApplication() public void ExitApplication()
{ {
_shellViewModel.MainModel.ShutdownEffects(); _shellViewModel.MainManager.Stop();
Application.Current.Shutdown(); Application.Current.Shutdown();
} }
} }

View File

@ -32,8 +32,7 @@
Content="Enable Artemis:" /> Content="Enable Artemis:" />
<controls:ToggleSwitch Grid.Row="0" Grid.Column="1" Margin="5" OnLabel="Yes" OffLabel="No" <controls:ToggleSwitch Grid.Row="0" Grid.Column="1" Margin="5" OnLabel="Yes" OffLabel="No"
VerticalAlignment="Center" HorizontalAlignment="Right" Width="125" VerticalAlignment="Center" HorizontalAlignment="Right" Width="125"
IsChecked="{Binding Path=Enabled, Mode=OneWay}" IsChecked="{Binding Path=Enabled, Mode=OneWay}" />
cal:Message.Attach="[Event Unchecked] = [Action ToggleEnabled]; [Event Checked] = [Action ToggleEnabled]" />
<!-- Startup with Windows --> <!-- Startup with Windows -->
<Label Grid.Row="1" Grid.Column="0" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Left" <Label Grid.Row="1" Grid.Column="0" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Left"
@ -82,7 +81,7 @@
<RowDefinition Height="*" /> <RowDefinition Height="*" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Artemis 1.0.0" VerticalAlignment="Center" <TextBlock Grid.Row="0" Grid.Column="0" Text="Artemis 1.0.1" VerticalAlignment="Center"
HorizontalAlignment="Left" /> HorizontalAlignment="Left" />
<Button Grid.Row="0" Grid.Column="1" Focusable="False" Style="{StaticResource AccentedSquareButtonStyle}" <Button Grid.Row="0" Grid.Column="1" Focusable="False" Style="{StaticResource AccentedSquareButtonStyle}"
cal:Message.Attach="[Action NavigateTo('https://github.com/SpoinkyNL/Artemis')]" cal:Message.Attach="[Action NavigateTo('https://github.com/SpoinkyNL/Artemis')]"