Merge pull request #100 from anya-hichu/main

Add ResetMaterials option to Design
This commit is contained in:
Ottermandias 2024-10-12 12:03:20 +02:00 committed by GitHub
commit ef96dadba5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 42 additions and 2 deletions

View file

@ -154,7 +154,7 @@ public sealed class AutoDesignApplier : IDisposable
{
Reduce(data.Objects[0], state, newSet, _config.RespectManualOnAutomationUpdate, false, out var forcedRedraw);
foreach (var actor in data.Objects)
_state.ReapplyState(actor, forcedRedraw,StateSource.Fixed);
_state.ReapplyState(actor, forcedRedraw, StateSource.Fixed);
}
}
else if (_objects.TryGetValueAllWorld(id, out data) || _objects.TryGetValueNonOwned(id, out data))
@ -286,7 +286,9 @@ public sealed class AutoDesignApplier : IDisposable
var mergedDesign = _designMerger.Merge(
set.Designs.Where(d => d.IsActive(actor)).SelectMany(d => d.Design.AllLinks.Select(l => (l.Design, l.Flags & d.Type, d.Jobs.Flags))),
state.ModelData.Customize, state.BaseData, true, _config.AlwaysApplyAssociatedMods);
_state.ApplyDesign(state, mergedDesign, new ApplySettings(0, StateSource.Fixed, respectManual, fromJobChange, false, false, false));
var resetMaterials = mergedDesign.ResetMaterials;
_state.ApplyDesign(state, mergedDesign, new ApplySettings(0, StateSource.Fixed, respectManual, fromJobChange, false, false, resetMaterials));
forcedRedraw = mergedDesign.ForcedRedraw;
}

View file

@ -45,6 +45,7 @@ public sealed class Design : DesignBase, ISavable, IDesignStandIn
public string[] Tags { get; internal set; } = [];
public int Index { get; internal set; }
public bool ForcedRedraw { get; internal set; }
public bool ResetMaterials { get; internal set; }
public bool QuickDesign { get; internal set; } = true;
public string Color { get; internal set; } = string.Empty;
public SortedList<Mod, ModSettings> AssociatedMods { get; private set; } = [];
@ -102,6 +103,7 @@ public sealed class Design : DesignBase, ISavable, IDesignStandIn
["Name"] = Name.Text,
["Description"] = Description,
["ForcedRedraw"] = ForcedRedraw,
["ResetMaterials"] = ResetMaterials,
["Color"] = Color,
["QuickDesign"] = QuickDesign,
["Tags"] = JArray.FromObject(Tags),
@ -244,6 +246,7 @@ public sealed class Design : DesignBase, ISavable, IDesignStandIn
LoadLinks(linkLoader, json["Links"], design);
design.Color = json["Color"]?.ToObject<string>() ?? string.Empty;
design.ForcedRedraw = json["ForcedRedraw"]?.ToObject<bool>() ?? false;
design.ResetMaterials = json["ResetMaterials"]?.ToObject<bool>() ?? false;
return design;
static string[] ParseTags(JObject json)

View file

@ -334,6 +334,17 @@ public sealed class DesignManager : DesignEditor
DesignChanged.Invoke(DesignChanged.Type.ForceRedraw, design, null);
}
public void ChangeResetMaterials(Design design, bool resetMaterials)
{
if (design.ResetMaterials == resetMaterials)
return;
design.ResetMaterials = resetMaterials;
SaveService.QueueSave(design);
Glamourer.Log.Debug($"Set {design.Identifier} to {(resetMaterials ? "not" : string.Empty)} reset materials.");
DesignChanged.Invoke(DesignChanged.Type.ResetMaterials, design, null);
}
/// <summary> Change whether to apply a specific customize value. </summary>
public void ChangeApplyCustomize(Design design, CustomizeIndex idx, bool value)
{

View file

@ -25,4 +25,6 @@ public interface IDesignStandIn : IEquatable<IDesignStandIn>
public bool ChangeData(object data);
public bool ForcedRedraw { get; }
public bool ResetMaterials { get; }
}

View file

@ -56,6 +56,8 @@ public class DesignMerger(
ReduceMaterials(design, ret);
if (design.ForcedRedraw)
ret.ForcedRedraw = true;
if (design.ResetMaterials)
ret.ResetMaterials = true;
}
ApplyFixFlags(ret, fixFlags);

View file

@ -100,4 +100,5 @@ public sealed class MergedDesign
public readonly SortedList<Mod, ModSettings> AssociatedMods = [];
public StateSources Sources = new();
public bool ForcedRedraw;
public bool ResetMaterials;
}

View file

@ -53,4 +53,7 @@ public class QuickSelectedDesign(QuickDesignCombo combo) : IDesignStandIn, IServ
public bool ForcedRedraw
=> combo.Design?.ForcedRedraw ?? false;
public bool ResetMaterials
=> combo.Design?.ResetMaterials ?? false;
}

View file

@ -81,4 +81,7 @@ public class RandomDesign(RandomDesignGenerator rng) : IDesignStandIn
public bool ForcedRedraw
=> false;
public bool ResetMaterials
=> false;
}

View file

@ -45,4 +45,7 @@ public class RevertDesign : IDesignStandIn
public bool ForcedRedraw
=> false;
public bool ResetMaterials
=> false;
}

View file

@ -90,6 +90,9 @@ public sealed class DesignChanged()
/// <summary> An existing design had changed whether it always forces a redraw or not. </summary>
ForceRedraw,
/// <summary> An existing design had changed whether it always reset materials or not. </summary>
ResetMaterials,
/// <summary> An existing design changed whether a specific customization is applied. </summary>
ApplyCustomize,

View file

@ -143,6 +143,13 @@ public class DesignDetailTab
_manager.ChangeForcedRedraw(_selector.Selected!, forceRedraw);
ImGuiUtil.HoverTooltip("Set this design to always force a redraw when it is applied through any means.");
var resetMaterials = _selector.Selected!.ResetMaterials;
ImGuiUtil.DrawFrameColumn("Reset Materials");
ImGui.TableNextColumn();
if (ImGui.Checkbox("##ResetMaterials", ref resetMaterials))
_manager.ChangeResetMaterials(_selector.Selected!, resetMaterials);
ImGuiUtil.HoverTooltip("Set this design to reset materials when it is applied through any means.");
ImGuiUtil.DrawFrameColumn("Color");
var colorName = _selector.Selected!.Color.Length == 0 ? DesignColors.AutomaticName : _selector.Selected!.Color;
ImGui.TableNextColumn();