Fix applying designs via weapons in gpose.

This commit is contained in:
Ottermandias 2024-02-23 16:49:07 +01:00
parent fdee4c4ca8
commit ecf6008b71
2 changed files with 25 additions and 8 deletions

View file

@ -19,7 +19,8 @@ public class StateEditor(
Configuration config, Configuration config,
ItemManager items, ItemManager items,
DesignMerger merger, DesignMerger merger,
ModSettingApplier modApplier) : IDesignEditor ModSettingApplier modApplier,
GPoseService gPose) : IDesignEditor
{ {
protected readonly InternalStateEditor Editor = editor; protected readonly InternalStateEditor Editor = editor;
protected readonly StateApplier Applier = applier; protected readonly StateApplier Applier = applier;
@ -276,7 +277,21 @@ public class StateEditor(
continue; continue;
var currentType = state.ModelData.Item(weaponSlot).Type; var currentType = state.ModelData.Item(weaponSlot).Type;
if (!settings.FromJobChange && mergedDesign.Weapons.TryGetValue(currentType, out var weapon)) if (!settings.FromJobChange)
{
if (gPose.InGPose)
{
Editor.ChangeItem(state, weaponSlot, mergedDesign.Design.DesignData.Item(weaponSlot),
settings.UseSingleSource ? settings.Source : mergedDesign.Sources[weaponSlot, false], out var old, settings.Key);
var oldSource = state.Sources[weaponSlot, false];
gPose.AddActionOnLeave(() =>
{
if (old.Type == state.BaseData.Item(weaponSlot).Type)
Editor.ChangeItem(state, weaponSlot, old, oldSource, out _, settings.Key);
});
}
if (mergedDesign.Weapons.TryGetValue(currentType, out var weapon))
{ {
var source = settings.UseSingleSource ? settings.Source : var source = settings.UseSingleSource ? settings.Source :
weapon.Item2 is StateSource.Game ? StateSource.Game : weapon.Item2; weapon.Item2 is StateSource.Game ? StateSource.Game : weapon.Item2;
@ -284,6 +299,7 @@ public class StateEditor(
settings.Key); settings.Key);
} }
} }
}
if (settings.FromJobChange) if (settings.FromJobChange)
jobChange.Set(state, mergedDesign.Weapons.Values.Select(m => jobChange.Set(state, mergedDesign.Weapons.Values.Select(m =>

View file

@ -27,8 +27,9 @@ public sealed class StateManager(
Configuration config, Configuration config,
JobChangeState jobChange, JobChangeState jobChange,
DesignMerger merger, DesignMerger merger,
ModSettingApplier modApplier) ModSettingApplier modApplier,
: StateEditor(editor, applier, @event, jobChange, config, items, merger, modApplier), IReadOnlyDictionary<ActorIdentifier, ActorState> GPoseService gPose)
: StateEditor(editor, applier, @event, jobChange, config, items, merger, modApplier, gPose), IReadOnlyDictionary<ActorIdentifier, ActorState>
{ {
private readonly Dictionary<ActorIdentifier, ActorState> _states = []; private readonly Dictionary<ActorIdentifier, ActorState> _states = [];