mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
Add Furniture Redrawing despite crash.
This commit is contained in:
parent
ab902cbe9e
commit
d026ca888f
1 changed files with 56 additions and 2 deletions
|
|
@ -4,6 +4,8 @@ using Dalamud.Game.ClientState.Objects.Enums;
|
|||
using Dalamud.Game.ClientState.Objects.SubKinds;
|
||||
using Dalamud.Game.ClientState.Objects.Types;
|
||||
using Dalamud.Plugin.Services;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Housing;
|
||||
using FFXIVClientStructs.Interop;
|
||||
using Penumbra.Api;
|
||||
using Penumbra.Api.Enums;
|
||||
using Penumbra.GameData;
|
||||
|
|
@ -101,6 +103,8 @@ public unsafe partial class RedrawService
|
|||
|
||||
public sealed unsafe partial class RedrawService : IDisposable
|
||||
{
|
||||
private const int FurnitureIdx = 1337;
|
||||
|
||||
private readonly IFramework _framework;
|
||||
private readonly IObjectTable _objects;
|
||||
private readonly ITargetManager _targets;
|
||||
|
|
@ -231,6 +235,18 @@ public sealed unsafe partial class RedrawService : IDisposable
|
|||
for (var i = 0; i < _queue.Count; ++i)
|
||||
{
|
||||
var idx = _queue[i];
|
||||
if (idx == FurnitureIdx)
|
||||
{
|
||||
EnableFurniture();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (idx == ~FurnitureIdx)
|
||||
{
|
||||
DisableFurniture();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (FindCorrectActor(idx < 0 ? ~idx : idx, out var obj))
|
||||
_afterGPoseQueue.Add(idx < 0 ? idx : ~idx);
|
||||
|
||||
|
|
@ -340,8 +356,10 @@ public sealed unsafe partial class RedrawService : IDisposable
|
|||
|
||||
public void RedrawObject(string name, RedrawType settings)
|
||||
{
|
||||
var lowerName = name.ToLowerInvariant();
|
||||
if (GetName(lowerName, out var target))
|
||||
var lowerName = name.ToLowerInvariant().Trim();
|
||||
if (lowerName == "furniture")
|
||||
_queue.Add(~FurnitureIdx);
|
||||
else if (GetName(lowerName, out var target))
|
||||
RedrawObject(target, settings);
|
||||
else
|
||||
foreach (var actor in _objects.Where(a => a.Name.ToString().ToLowerInvariant() == lowerName))
|
||||
|
|
@ -353,4 +371,40 @@ public sealed unsafe partial class RedrawService : IDisposable
|
|||
foreach (var actor in _objects)
|
||||
RedrawObject(actor, settings);
|
||||
}
|
||||
|
||||
private void DisableFurniture()
|
||||
{
|
||||
var housingManager = HousingManager.Instance();
|
||||
if (housingManager == null)
|
||||
return;
|
||||
var currentTerritory = housingManager->CurrentTerritory;
|
||||
if (currentTerritory == null)
|
||||
return;
|
||||
|
||||
foreach (var f in currentTerritory->FurnitureSpan.PointerEnumerator())
|
||||
{
|
||||
var gameObject = f->Index >= 0 ? currentTerritory->HousingObjectManager.ObjectsSpan[f->Index].Value : null;
|
||||
if (gameObject == null)
|
||||
continue;
|
||||
gameObject->DisableDraw();
|
||||
}
|
||||
}
|
||||
|
||||
private void EnableFurniture()
|
||||
{
|
||||
var housingManager = HousingManager.Instance();
|
||||
if (housingManager == null)
|
||||
return;
|
||||
var currentTerritory = housingManager->CurrentTerritory;
|
||||
if (currentTerritory == null)
|
||||
return;
|
||||
|
||||
foreach (var f in currentTerritory->FurnitureSpan.PointerEnumerator())
|
||||
{
|
||||
var gameObject = f->Index >= 0 ? currentTerritory->HousingObjectManager.ObjectsSpan[f->Index].Value : null;
|
||||
if (gameObject == null)
|
||||
continue;
|
||||
gameObject->EnableDraw();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue