Add decal color, fix some bugs and improve logic and handling somewhat.

This commit is contained in:
Ottermandias 2024-01-09 16:05:18 +01:00
parent 6158bcb2f9
commit 5ea779a34c
14 changed files with 351 additions and 174 deletions

View file

@ -10,11 +10,13 @@ public ref struct CustomizeParameterDrawData(CustomizeParameterFlag flag, in Des
public readonly CustomizeParameterFlag Flag = flag;
public bool Locked;
public bool DisplayApplication;
public bool AllowRevert;
public Action<Vector3> ValueSetter = null!;
public Action<bool> ApplySetter = null!;
public Vector3 CurrentValue = data.Parameters[flag];
public bool CurrentApply;
public Action<CustomizeParameterValue> ValueSetter = null!;
public Action<bool> ApplySetter = null!;
public CustomizeParameterValue CurrentValue = data.Parameters[flag];
public CustomizeParameterValue GameValue;
public bool CurrentApply;
public static CustomizeParameterDrawData FromDesign(DesignManager manager, Design design, CustomizeParameterFlag flag)
=> new(flag, design.DesignData)
@ -32,5 +34,7 @@ public ref struct CustomizeParameterDrawData(CustomizeParameterFlag flag, in Des
Locked = state.IsLocked,
DisplayApplication = false,
ValueSetter = v => manager.ChangeCustomizeParameter(state, flag, v, StateChanged.Source.Manual),
GameValue = state.BaseData.Parameters[flag],
AllowRevert = true,
};
}

View file

@ -3,6 +3,7 @@ using Glamourer.GameData;
using Glamourer.State;
using Dalamud.Interface.Utility.Raii;
using ImGuiNET;
using OtterGui;
using OtterGui.Services;
namespace Glamourer.Gui.Customization;
@ -11,8 +12,11 @@ public class CustomizeParameterDrawer(Configuration config) : IService
{
public void Draw(DesignManager designManager, Design design)
{
foreach (var flag in CustomizeParameterExtensions.TripleFlags)
DrawColorInput(CustomizeParameterDrawData.FromDesign(designManager, design, flag));
foreach (var flag in CustomizeParameterExtensions.RgbFlags)
DrawColorInput3(CustomizeParameterDrawData.FromDesign(designManager, design, flag));
foreach (var flag in CustomizeParameterExtensions.RgbaFlags)
DrawColorInput4(CustomizeParameterDrawData.FromDesign(designManager, design, flag));
foreach (var flag in CustomizeParameterExtensions.PercentageFlags)
DrawPercentageInput(CustomizeParameterDrawData.FromDesign(designManager, design, flag));
@ -23,8 +27,11 @@ public class CustomizeParameterDrawer(Configuration config) : IService
public void Draw(StateManager stateManager, ActorState state)
{
foreach (var flag in CustomizeParameterExtensions.TripleFlags)
DrawColorInput(CustomizeParameterDrawData.FromState(stateManager, state, flag));
foreach (var flag in CustomizeParameterExtensions.RgbFlags)
DrawColorInput3(CustomizeParameterDrawData.FromState(stateManager, state, flag));
foreach (var flag in CustomizeParameterExtensions.RgbaFlags)
DrawColorInput4(CustomizeParameterDrawData.FromState(stateManager, state, flag));
foreach (var flag in CustomizeParameterExtensions.PercentageFlags)
DrawPercentageInput(CustomizeParameterDrawData.FromState(stateManager, state, flag));
@ -33,15 +40,30 @@ public class CustomizeParameterDrawer(Configuration config) : IService
DrawValueInput(CustomizeParameterDrawData.FromState(stateManager, state, flag));
}
private void DrawColorInput(in CustomizeParameterDrawData data)
private void DrawColorInput3(in CustomizeParameterDrawData data)
{
using var id = ImRaii.PushId((int)data.Flag);
var value = data.CurrentValue;
var value = data.CurrentValue.InternalTriple;
using (_ = ImRaii.Disabled(data.Locked))
{
if (ImGui.ColorEdit3("##value", ref value, ImGuiColorEditFlags.Float))
data.ValueSetter(value);
if (ImGui.ColorEdit3("##value", ref value, ImGuiColorEditFlags.Float | ImGuiColorEditFlags.HDR | ImGuiColorEditFlags.NoOptions))
data.ValueSetter(new CustomizeParameterValue(value));
}
DrawRevert(data);
DrawApplyAndLabel(data);
}
private void DrawColorInput4(in CustomizeParameterDrawData data)
{
using var id = ImRaii.PushId((int)data.Flag);
var value = data.CurrentValue.InternalQuadruple;
using (_ = ImRaii.Disabled(data.Locked))
{
if (ImGui.ColorEdit4("##value", ref value, ImGuiColorEditFlags.Float | ImGuiColorEditFlags.HDR | ImGuiColorEditFlags.NoOptions))
data.ValueSetter(new CustomizeParameterValue(value));
}
DrawRevert(data);
DrawApplyAndLabel(data);
}
@ -54,8 +76,9 @@ public class CustomizeParameterDrawer(Configuration config) : IService
using (_ = ImRaii.Disabled(data.Locked))
{
if (ImGui.InputFloat("##value", ref value, 0.1f, 0.5f))
data.ValueSetter(new Vector3(value));
data.ValueSetter(new CustomizeParameterValue(value));
}
DrawRevert(data);
DrawApplyAndLabel(data);
}
@ -67,13 +90,26 @@ public class CustomizeParameterDrawer(Configuration config) : IService
using (_ = ImRaii.Disabled(data.Locked))
{
if (ImGui.SliderFloat("##value", ref value, 0, 100, "%.2f", ImGuiSliderFlags.AlwaysClamp))
data.ValueSetter(new Vector3(value / 100f));
if (ImGui.SliderFloat("##value", ref value, -1000f, 1000f, "%.2f"))
data.ValueSetter(new CustomizeParameterValue(value / 100f));
}
DrawRevert(data);
DrawApplyAndLabel(data);
}
private static void DrawRevert(in CustomizeParameterDrawData data)
{
if (data.Locked || !data.AllowRevert)
return;
if (ImGui.IsItemClicked(ImGuiMouseButton.Right) && ImGui.GetIO().KeyCtrl)
data.ValueSetter(data.GameValue);
ImGuiUtil.HoverTooltip("Hold Control and Right-click to revert to game values.");
}
private static void DrawApply(in CustomizeParameterDrawData data)
{
if (UiHelpers.DrawCheckbox("##apply", "Apply this custom parameter when applying the Design.", data.CurrentApply, out var enabled,

View file

@ -85,19 +85,13 @@ public unsafe class ModelEvaluationPanel(
{
if (!model.IsHuman)
return;
if (model.AsHuman->CustomizeParameterCBuffer == null)
return;
var ptr = (CustomizeParameter*)model.AsHuman->CustomizeParameterCBuffer->UnsafeSourcePointer;
if (ptr == null)
return;
var convert = CustomizeParameterData.FromParameters(*ptr);
var convert = model.GetParameterData();
foreach (var flag in CustomizeParameterExtensions.AllFlags)
{
ImGuiUtil.DrawTableColumn(flag.ToString());
ImGuiUtil.DrawTableColumn(string.Empty);
ImGuiUtil.DrawTableColumn(convert[flag].ToString());
ImGuiUtil.DrawTableColumn(convert[flag].InternalQuadruple.ToString());
ImGui.TableNextColumn();
}
}