This commit is contained in:
2025-12-28 05:24:12 +09:00
parent 1632258c4f
commit 8f32b375dd
27 changed files with 3040 additions and 482 deletions

View File

@@ -51,6 +51,7 @@ public unsafe class LightFinderPlateHandler : IHostedService, IMediatorSubscribe
private readonly Lock _labelLock = new();
private readonly NameplateBuffers _buffers = new();
private int _labelRenderCount;
private LightfinderLabelRenderer _lastRenderer;
private const string _defaultLabelText = "LightFinder";
private const SeIconChar _defaultIcon = SeIconChar.Hyadelyn;
@@ -70,6 +71,8 @@ public unsafe class LightFinderPlateHandler : IHostedService, IMediatorSubscribe
private readonly List<RectF> _uiRects = new(128);
private ImmutableHashSet<string> _activeBroadcastingCids = [];
private bool IsPictomancyRenderer => _configService.Current.LightfinderLabelRenderer == LightfinderLabelRenderer.Pictomancy;
public LightFinderPlateHandler(
ILogger<LightFinderPlateHandler> logger,
IAddonLifecycle addonLifecycle,
@@ -92,9 +95,29 @@ public unsafe class LightFinderPlateHandler : IHostedService, IMediatorSubscribe
_pairUiService = pairUiService;
_uiBuilder = pluginInterface.UiBuilder ?? throw new ArgumentNullException(nameof(pluginInterface));
_ = pictomancyService ?? throw new ArgumentNullException(nameof(pictomancyService));
_lastRenderer = _configService.Current.LightfinderLabelRenderer;
}
private void RefreshRendererState()
{
var renderer = _configService.Current.LightfinderLabelRenderer;
if (renderer == _lastRenderer)
return;
_lastRenderer = renderer;
if (renderer == LightfinderLabelRenderer.Pictomancy)
{
FlagRefresh();
}
else
{
ClearNameplateCaches();
_lastNamePlateDrawFrame = 0;
}
}
internal void Init()
{
if (!_drawSubscribed)
@@ -168,6 +191,14 @@ public unsafe class LightFinderPlateHandler : IHostedService, IMediatorSubscribe
/// <param name="args"></param>
private void NameplateDrawDetour(AddonEvent type, AddonArgs args)
{
RefreshRendererState();
if (!IsPictomancyRenderer)
{
ClearLabelBuffer();
_lastNamePlateDrawFrame = 0;
return;
}
if (_clientState.IsGPosing)
{
ClearLabelBuffer();
@@ -503,6 +534,10 @@ public unsafe class LightFinderPlateHandler : IHostedService, IMediatorSubscribe
/// </summary>
private void OnUiBuilderDraw()
{
RefreshRendererState();
if (!IsPictomancyRenderer)
return;
if (!_mEnabled)
return;
@@ -1015,6 +1050,12 @@ public unsafe class LightFinderPlateHandler : IHostedService, IMediatorSubscribe
public void OnTick(PriorityFrameworkUpdateMessage _)
{
if (!IsPictomancyRenderer)
{
_needsLabelRefresh = false;
return;
}
if (_needsLabelRefresh)
{
UpdateNameplateNodes();