From eb7cc6ffa02f82ab33136d75e8062851e2354c13 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Wed, 5 Jun 2024 11:28:58 +0200 Subject: [PATCH] Add IpcPending. --- Glamourer/Interop/Material/MaterialManager.cs | 5 +++++ Glamourer/State/StateListener.cs | 6 ++++++ Glamourer/State/StateSource.cs | 21 +++++++++++++------ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Glamourer/Interop/Material/MaterialManager.cs b/Glamourer/Interop/Material/MaterialManager.cs index 8e3936e..b8941e0 100644 --- a/Glamourer/Interop/Material/MaterialManager.cs +++ b/Glamourer/Interop/Material/MaterialManager.cs @@ -96,6 +96,11 @@ public sealed unsafe class MaterialManager : IRequiredService, IDisposable state.Materials.UpdateValue(idx, new MaterialValueState(newGame, materialValue.Model, drawData, StateSource.Manual), out _); break; + case StateSource.IpcPending: + materialValue.Model.Apply(ref row); + state.Materials.UpdateValue(idx, new MaterialValueState(newGame, materialValue.Model, drawData, StateSource.IpcManual), + out _); + break; case StateSource.IpcManual: case StateSource.Manual: deleteList.Add(idx); diff --git a/Glamourer/State/StateListener.cs b/Glamourer/State/StateListener.cs index 73c8f0d..bd75faf 100644 --- a/Glamourer/State/StateListener.cs +++ b/Glamourer/State/StateListener.cs @@ -800,6 +800,12 @@ public class StateListener : IDisposable if (_config.UseAdvancedParameters) model.ApplySingleParameterData(flag, state.ModelData.Parameters); break; + case StateSource.IpcPending: + state.BaseData.Parameters.Set(flag, newValue); + state.Sources[flag] = StateSource.IpcManual; + if (_config.UseAdvancedParameters) + model.ApplySingleParameterData(flag, state.ModelData.Parameters); + break; } } } diff --git a/Glamourer/State/StateSource.cs b/Glamourer/State/StateSource.cs index d489814..9a12214 100644 --- a/Glamourer/State/StateSource.cs +++ b/Glamourer/State/StateSource.cs @@ -10,8 +10,9 @@ public enum StateSource : byte IpcFixed, IpcManual, - // Only used for CustomizeParameters. + // Only used for CustomizeParameters and advanced dyes. Pending, + IpcPending, } public static class StateSourceExtensions @@ -19,9 +20,10 @@ public static class StateSourceExtensions public static StateSource Base(this StateSource source) => source switch { - StateSource.Manual or StateSource.IpcManual or StateSource.Pending => StateSource.Manual, - StateSource.Fixed or StateSource.IpcFixed => StateSource.Fixed, - _ => StateSource.Game, + StateSource.Manual or StateSource.Pending => StateSource.Manual, + StateSource.IpcManual or StateSource.IpcPending => StateSource.Manual, + StateSource.Fixed or StateSource.IpcFixed => StateSource.Fixed, + _ => StateSource.Game, }; public static bool IsGame(this StateSource source) @@ -34,7 +36,12 @@ public static class StateSourceExtensions => source.Base() is StateSource.Fixed; public static StateSource SetPending(this StateSource source) - => source is StateSource.Manual ? StateSource.Pending : source; + => source switch + { + StateSource.Manual => StateSource.Pending, + StateSource.IpcManual => StateSource.IpcPending, + _ => source, + }; public static bool RequiresChange(this StateSource source) => source switch @@ -46,7 +53,7 @@ public static class StateSourceExtensions }; public static bool IsIpc(this StateSource source) - => source is StateSource.IpcManual or StateSource.IpcFixed; + => source is StateSource.IpcManual or StateSource.IpcFixed or StateSource.IpcPending; } public unsafe struct StateSources @@ -97,6 +104,7 @@ public unsafe struct StateSources case (byte)StateSource.Manual | ((byte)StateSource.Fixed << 4): case (byte)StateSource.IpcFixed | ((byte)StateSource.Fixed << 4): case (byte)StateSource.Pending | ((byte)StateSource.Fixed << 4): + case (byte)StateSource.IpcPending | ((byte)StateSource.Fixed << 4): case (byte)StateSource.IpcManual | ((byte)StateSource.Fixed << 4): _data[i] = (byte)((value & 0x0F) | ((byte)StateSource.Manual << 4)); break; @@ -104,6 +112,7 @@ public unsafe struct StateSources case ((byte)StateSource.Manual << 4) | (byte)StateSource.Fixed: case ((byte)StateSource.IpcFixed << 4) | (byte)StateSource.Fixed: case ((byte)StateSource.Pending << 4) | (byte)StateSource.Fixed: + case ((byte)StateSource.IpcPending << 4) | (byte)StateSource.Fixed: case ((byte)StateSource.IpcManual << 4) | (byte)StateSource.Fixed: _data[i] = (byte)((value & 0xF0) | (byte)StateSource.Manual); break;