Skip to content

Commit

Permalink
Merge pull request #167 from logicallysynced/chromatics-3.x
Browse files Browse the repository at this point in the history
Chromatics 3.x
  • Loading branch information
logicallysynced authored Oct 1, 2024
2 parents 0c6e538 + fa1072a commit cbf18b3
Show file tree
Hide file tree
Showing 55 changed files with 4,185 additions and 2,297 deletions.
38 changes: 20 additions & 18 deletions Chromatics/Chromatics.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<TargetFramework>net8.0-windows7.0</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<StartupObject>Chromatics.Program</StartupObject>
<Version>3.1.3.1</Version>
<Version>3.1.5.0</Version>
<Authors>Danielle Thompson</Authors>
<ApplicationManifest>app.manifest</ApplicationManifest>
<Copyright>Danielle Thompson 2024</Copyright>
Expand Down Expand Up @@ -37,25 +37,27 @@
<PackageReference Include="Cyotek.Windows.Forms.ColorPicker" Version="2.0.0-beta.7" />
<PackageReference Include="FFXIVWeather" Version="1.0.16" />
<PackageReference Include="HidSharp" Version="2.1.0" />
<PackageReference Include="HueApi" Version="1.6.3" />
<PackageReference Include="HueApi.ColorConverters" Version="1.5.1" />
<PackageReference Include="HueApi.Entertainment" Version="1.5.1" />
<PackageReference Include="MouseKeyHook.NetCore" Version="5.6.1.1" />
<PackageReference Include="NAudio" Version="2.2.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.3.2" />
<PackageReference Include="Q42.HueApi" Version="3.23.1" />
<PackageReference Include="Q42.HueApi.Entertainment" Version="3.23.1" />
<PackageReference Include="RGB.NET.Core" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.Asus" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.CoolerMaster" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.Corsair" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.Logitech" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.Msi" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.Novation" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.OpenRGB" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.Razer" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.SteelSeries" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Devices.Wooting" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.HID" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Layout" Version="3.0.0-prerelease.1" />
<PackageReference Include="RGB.NET.Presets" Version="3.0.0-prerelease.1" />
<PackageReference Include="NLog" Version="5.3.3" />
<PackageReference Include="RGB.NET.Core" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.Asus" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.CoolerMaster" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.Corsair" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.Logitech" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.Msi" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.Novation" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.OpenRGB" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.Razer" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.SteelSeries" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Devices.Wooting" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.HID" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Layout" Version="3.0.0-prerelease.2" />
<PackageReference Include="RGB.NET.Presets" Version="3.0.0-prerelease.2" />
<PackageReference Include="Sanford.Multimedia.Midi" Version="6.6.2" />
<PackageReference Include="Sharlayan" Version="8.0.1" />
</ItemGroup>
Expand Down
88 changes: 59 additions & 29 deletions Chromatics/Core/GameController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,8 @@
using Chromatics.Interfaces;
using Chromatics.Enums;
using System.Threading;
using Chromatics.Extensions.RGB.NET;
using RGB.NET.Core;
using RGB.NET.Presets.Decorators;
using RGB.NET.Presets.Textures.Gradients;
using RGB.NET.Presets.Textures;
using Chromatics.Extensions.RGB.NET.Decorators;
using static MetroFramework.Drawing.MetroPaint;
using System.Security.Policy;
using Sharlayan.Utilities;
using Sharlayan.Core.Enums;
using Chromatics.Extensions.Sharlayan;

Expand All @@ -30,15 +23,19 @@ namespace Chromatics.Core

public static class GameController
{
private static LayerProcessorFactory _layerProcessorFactory;
private static MemoryHandler _memoryHandler;
public static event JobChanged jobChanged;
private static CustomComparers.LayerComparer comparer = new();
private static CancellationTokenSource _GameConnectionCancellationTokenSource = new CancellationTokenSource();
private static CancellationTokenSource _GameLoopCancellationTokenSource = new CancellationTokenSource();
private static CancellationTokenSource _masterCancellationToken = new CancellationTokenSource();
private static Actor.Job _currentJob;
private static SharlayanConfiguration _configuration;
private static readonly int _loopInterval = 200;
private static readonly int _connectionInterval = 10000;
private static int _connectionAttempts = 0;
private static int activeProcessId;
private static bool gameConnected;
private static bool gameSetup;
private static bool memoryEfficientLoop;
Expand All @@ -49,30 +46,53 @@ public static void Setup()
{
if (gameSetup) return;

_layerProcessorFactory = LayerProcessorFactory.Instance;
comparer = new CustomComparers.LayerComparer();


if (!gameConnected)
{
RGBController.StopEffects();
RGBController.RunStartupEffects();
Task.Run(() => GameConnectionLoop(_GameConnectionCancellationTokenSource.Token));
Task.Run(() => GameConnectionLoop(_GameConnectionCancellationTokenSource.Token)).ContinueWith(t =>
{
if (t.IsFaulted)
{
Logger.WriteConsole(LoggerTypes.Error, $"GameConnectionLoop task failed: {t.Exception?.GetBaseException().Message}");
}
}, _masterCancellationToken.Token);
}

gameSetup = true;
}

public static void Exit()
{
StopGameLoop();
_GameConnectionCancellationTokenSource.Cancel();
_GameLoopCancellationTokenSource.Cancel();
_masterCancellationToken.Cancel();
_GameConnectionCancellationTokenSource.Dispose();
_GameLoopCancellationTokenSource.Dispose();
_masterCancellationToken.Dispose();
}

public static void Stop(bool reconnect = false)
{
RGBController.StopEffects();
Logger.WriteConsole(LoggerTypes.FFXIV, @"Stopping FFXIV Connection..");

if (jobChanged != null)
{
foreach (Delegate d in jobChanged.GetInvocationList())
{
jobChanged -= (JobChanged)d;
}
}

StopGameLoop(reconnect);
_GameConnectionCancellationTokenSource.Cancel();

}

public static bool IsGameConnected()
Expand Down Expand Up @@ -117,29 +137,36 @@ private static void StartGameLoop()
{
_GameLoopCancellationTokenSource.Dispose();
_GameLoopCancellationTokenSource = new CancellationTokenSource();
Task.Run(() => GameLoop(_GameLoopCancellationTokenSource.Token));
Task.Run(() => GameLoop(_GameLoopCancellationTokenSource.Token), _masterCancellationToken.Token);
}

private static void StopGameLoop(bool reconnect = false)
{
_GameLoopCancellationTokenSource.Cancel();
_memoryHandler?.Dispose();

if (_memoryHandler != null)
if (activeProcessId != -1)
{
#if DEBUG
Debug.WriteLine(@"Disposed Memory Handler object.");
#endif

_memoryHandler.Dispose();
SharlayanMemoryManager.Instance.RemoveHandler(activeProcessId);
activeProcessId = -1;
}

_configuration.ProcessModel.Process?.Dispose();
_configuration = null;

_masterCancellationToken.Cancel();
_masterCancellationToken.Dispose();
_masterCancellationToken = new CancellationTokenSource();

_layerProcessorFactory.DisposeAll();

if (reconnect)
{
_GameConnectionCancellationTokenSource.Dispose();
_GameConnectionCancellationTokenSource = new CancellationTokenSource();
RGBController.StopEffects();
RGBController.RunStartupEffects();
Task.Run(() => GameConnectionLoop(_GameConnectionCancellationTokenSource.Token));
Task.Run(() => GameConnectionLoop(_GameConnectionCancellationTokenSource.Token), _masterCancellationToken.Token);
}
}

Expand Down Expand Up @@ -272,7 +299,7 @@ private static void ConnectFFXIVClient()
Process = process
};

SharlayanConfiguration configuration = new SharlayanConfiguration
_configuration = new SharlayanConfiguration
{
ProcessModel = processModel,
GameLanguage = gameLanguage,
Expand All @@ -284,7 +311,7 @@ private static void ConnectFFXIVClient()
#if DEBUG
Debug.WriteLine($"Using Local Cache: {AppSettings.GetSettings().localcache}");
#endif
_memoryHandler = SharlayanMemoryManager.Instance.AddHandler(configuration);
_memoryHandler = SharlayanMemoryManager.Instance.AddHandler(_configuration);

//Load Other Memory Zones
DutyFinderBellExtension.RefreshData(_memoryHandler);
Expand All @@ -293,6 +320,7 @@ private static void ConnectFFXIVClient()
MusicExtension.RefreshData(_memoryHandler);

gameConnected = true;
activeProcessId = _configuration.ProcessModel.ProcessID;

}

Expand All @@ -314,6 +342,8 @@ private static void ConnectFFXIVClient()
Debug.WriteLine($"Found {location.Key}. Location: {location.Value.GetAddress().ToInt64():X}");
}
#endif

GC.Collect();
}
}
catch (Exception ex)
Expand Down Expand Up @@ -392,6 +422,9 @@ private static void GameProcessLayers()
Debug.WriteLine(@"User on title or character screen");
#endif

_layerProcessorFactory.DisposeAll();
GC.Collect();

_onTitle = true;
wasPreviewed = false;
}
Expand All @@ -413,6 +446,7 @@ private static void GameProcessLayers()
RGBController.StopEffects();
RGBController.ResetLayerGroups();
_onTitle = false;
GC.Collect();
}

}
Expand Down Expand Up @@ -443,27 +477,23 @@ private static void GameProcessLayers()
switch (layer.rootLayerType)
{
case LayerType.BaseLayer:

var baseLayerProcessors = BaseLayerProcessorFactory.GetProcessors();
baseLayerProcessors[(BaseLayerType)layer.layerTypeindex].Process(layer);
var baseProcessor = _layerProcessorFactory.GetProcessor((BaseLayerType)layer.layerTypeindex);
baseProcessor.Process(layer);
break;

case LayerType.DynamicLayer:

var dynamicLayerProcessors = DynamicLayerProcessorFactory.GetProcessors();
dynamicLayerProcessors[(DynamicLayerType)layer.layerTypeindex].Process(layer);
var dynamicProcessor = _layerProcessorFactory.GetProcessor((DynamicLayerType)layer.layerTypeindex);
dynamicProcessor.Process(layer);
break;

case LayerType.EffectLayer:
foreach (var layerProcessor in EffectLayerProcessorFactory.GetProcessors())
var effectProcessors = EffectLayerProcessorFactory.GetProcessors();
foreach (var effectProcessor in effectProcessors)
{
layerProcessor.Value.Process(layer);
effectProcessor.Value.Process(layer);
}
break;

}


}
}
catch (Exception ex)
Expand Down
Loading

0 comments on commit cbf18b3

Please sign in to comment.