mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2025-12-12 10:17:23 +01:00
Skip automatic updates from temporary settings when applied by design.
This commit is contained in:
parent
9e7679e70f
commit
5a9e9513f4
4 changed files with 31 additions and 12 deletions
|
|
@ -7,12 +7,12 @@ using Penumbra.GameData.Structs;
|
||||||
|
|
||||||
namespace Glamourer.Interop.Penumbra;
|
namespace Glamourer.Interop.Penumbra;
|
||||||
|
|
||||||
public class ModSettingApplier(PenumbraService penumbra, Configuration config, ObjectManager objects, CollectionOverrideService overrides)
|
public class ModSettingApplier(PenumbraService penumbra, PenumbraAutoRedrawSkip autoRedrawSkip, Configuration config, ObjectManager objects, CollectionOverrideService overrides)
|
||||||
: IService
|
: IService
|
||||||
{
|
{
|
||||||
private readonly HashSet<Guid> _collectionTracker = [];
|
private readonly HashSet<Guid> _collectionTracker = [];
|
||||||
|
|
||||||
public void HandleStateApplication(ActorState state, MergedDesign design)
|
public void HandleStateApplication(ActorState state, MergedDesign design, bool skipAutoRedraw)
|
||||||
{
|
{
|
||||||
if (!config.AlwaysApplyAssociatedMods || (design.AssociatedMods.Count == 0 && !design.ResetTemporarySettings))
|
if (!config.AlwaysApplyAssociatedMods || (design.AssociatedMods.Count == 0 && !design.ResetTemporarySettings))
|
||||||
return;
|
return;
|
||||||
|
|
@ -26,6 +26,7 @@ public class ModSettingApplier(PenumbraService penumbra, Configuration config, O
|
||||||
}
|
}
|
||||||
|
|
||||||
_collectionTracker.Clear();
|
_collectionTracker.Clear();
|
||||||
|
using var skip = autoRedrawSkip.SkipAutoUpdates(skipAutoRedraw);
|
||||||
foreach (var actor in data.Objects)
|
foreach (var actor in data.Objects)
|
||||||
{
|
{
|
||||||
var (collection, _, overridden) = overrides.GetCollection(actor, state.Identifier);
|
var (collection, _, overridden) = overrides.GetCollection(actor, state.Identifier);
|
||||||
|
|
|
||||||
|
|
@ -12,16 +12,18 @@ namespace Glamourer.Interop.Penumbra;
|
||||||
|
|
||||||
public class PenumbraAutoRedraw : IDisposable, IRequiredService
|
public class PenumbraAutoRedraw : IDisposable, IRequiredService
|
||||||
{
|
{
|
||||||
private const int WaitFrames = 5;
|
private const int WaitFrames = 5;
|
||||||
private readonly Configuration _config;
|
private readonly Configuration _config;
|
||||||
private readonly PenumbraService _penumbra;
|
private readonly PenumbraService _penumbra;
|
||||||
private readonly StateManager _state;
|
private readonly StateManager _state;
|
||||||
private readonly ObjectManager _objects;
|
private readonly ObjectManager _objects;
|
||||||
private readonly IFramework _framework;
|
private readonly IFramework _framework;
|
||||||
private readonly StateChanged _stateChanged;
|
private readonly StateChanged _stateChanged;
|
||||||
|
private readonly PenumbraAutoRedrawSkip _skip;
|
||||||
|
|
||||||
|
|
||||||
public PenumbraAutoRedraw(PenumbraService penumbra, Configuration config, StateManager state, ObjectManager objects, IFramework framework,
|
public PenumbraAutoRedraw(PenumbraService penumbra, Configuration config, StateManager state, ObjectManager objects, IFramework framework,
|
||||||
StateChanged stateChanged)
|
StateChanged stateChanged, PenumbraAutoRedrawSkip skip)
|
||||||
{
|
{
|
||||||
_penumbra = penumbra;
|
_penumbra = penumbra;
|
||||||
_config = config;
|
_config = config;
|
||||||
|
|
@ -29,6 +31,7 @@ public class PenumbraAutoRedraw : IDisposable, IRequiredService
|
||||||
_objects = objects;
|
_objects = objects;
|
||||||
_framework = framework;
|
_framework = framework;
|
||||||
_stateChanged = stateChanged;
|
_stateChanged = stateChanged;
|
||||||
|
_skip = skip;
|
||||||
_penumbra.ModSettingChanged += OnModSettingChange;
|
_penumbra.ModSettingChanged += OnModSettingChange;
|
||||||
_framework.Update += OnFramework;
|
_framework.Update += OnFramework;
|
||||||
_stateChanged.Subscribe(OnStateChanged, StateChanged.Priority.PenumbraAutoRedraw);
|
_stateChanged.Subscribe(OnStateChanged, StateChanged.Priority.PenumbraAutoRedraw);
|
||||||
|
|
@ -94,7 +97,7 @@ public class PenumbraAutoRedraw : IDisposable, IRequiredService
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else if (_config.AutoRedrawEquipOnChanges)
|
else if (_config.AutoRedrawEquipOnChanges && !_skip.Skip)
|
||||||
{
|
{
|
||||||
// Only update once per frame.
|
// Only update once per frame.
|
||||||
var playerName = _penumbra.GetCurrentPlayerCollection();
|
var playerName = _penumbra.GetCurrentPlayerCollection();
|
||||||
|
|
|
||||||
15
Glamourer/Interop/Penumbra/PenumbraAutoRedrawSkip.cs
Normal file
15
Glamourer/Interop/Penumbra/PenumbraAutoRedrawSkip.cs
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
using OtterGui.Classes;
|
||||||
|
using OtterGui.Services;
|
||||||
|
|
||||||
|
namespace Glamourer.Interop.Penumbra;
|
||||||
|
|
||||||
|
public class PenumbraAutoRedrawSkip : IService
|
||||||
|
{
|
||||||
|
private bool _skipAutoUpdates;
|
||||||
|
|
||||||
|
public BoolSetter SkipAutoUpdates(bool skip)
|
||||||
|
=> new(ref _skipAutoUpdates, skip);
|
||||||
|
|
||||||
|
public bool Skip
|
||||||
|
=> _skipAutoUpdates;
|
||||||
|
}
|
||||||
|
|
@ -262,7 +262,7 @@ public class StateEditor(
|
||||||
public void ApplyDesign(object data, MergedDesign mergedDesign, ApplySettings settings)
|
public void ApplyDesign(object data, MergedDesign mergedDesign, ApplySettings settings)
|
||||||
{
|
{
|
||||||
var state = (ActorState)data;
|
var state = (ActorState)data;
|
||||||
modApplier.HandleStateApplication(state, mergedDesign);
|
modApplier.HandleStateApplication(state, mergedDesign, true);
|
||||||
if (!Editor.ChangeModelId(state, mergedDesign.Design.DesignData.ModelId, mergedDesign.Design.DesignData.Customize,
|
if (!Editor.ChangeModelId(state, mergedDesign.Design.DesignData.ModelId, mergedDesign.Design.DesignData.Customize,
|
||||||
mergedDesign.Design.GetDesignDataRef().GetEquipmentPtr(), settings.Source, out var oldModelId, settings.Key))
|
mergedDesign.Design.GetDesignDataRef().GetEquipmentPtr(), settings.Source, out var oldModelId, settings.Key))
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue