Some formatting in Materials.Shpk.

This commit is contained in:
Ottermandias 2023-08-25 18:45:13 +02:00
parent 2ac997610d
commit 5023fafc19
2 changed files with 41 additions and 32 deletions

@ -1 +1 @@
Subproject commit c8394607addd29cb7f8ae3257f635a4486c40a63 Subproject commit 728dd8c33f8b43f7a2725ac7c8886fe7cb3f04a9

View file

@ -101,9 +101,9 @@ public partial class ModEditWindow
if (ImGui.Selectable(value, value == tab.Mtrl.ShaderPackage.Name)) if (ImGui.Selectable(value, value == tab.Mtrl.ShaderPackage.Name))
{ {
tab.Mtrl.ShaderPackage.Name = value; tab.Mtrl.ShaderPackage.Name = value;
ret = true; ret = true;
tab.AssociatedShpk = null; tab.AssociatedShpk = null;
tab.LoadedShpkPath = FullPath.Empty; tab.LoadedShpkPath = FullPath.Empty;
tab.LoadShpk(tab.FindAssociatedShpk(out _, out _)); tab.LoadShpk(tab.FindAssociatedShpk(out _, out _));
} }
} }
@ -133,6 +133,7 @@ public partial class ModEditWindow
/// </summary> /// </summary>
private void DrawCustomAssociations(MtrlTab tab) private void DrawCustomAssociations(MtrlTab tab)
{ {
const string tooltip = "Click to copy file path to clipboard.";
var text = tab.AssociatedShpk == null var text = tab.AssociatedShpk == null
? "Associated .shpk file: None" ? "Associated .shpk file: None"
: $"Associated .shpk file: {tab.LoadedShpkPathName}"; : $"Associated .shpk file: {tab.LoadedShpkPathName}";
@ -145,20 +146,9 @@ public partial class ModEditWindow
ImGui.Dummy(new Vector2(ImGui.GetTextLineHeight() / 2)); ImGui.Dummy(new Vector2(ImGui.GetTextLineHeight() / 2));
if (ImGui.Selectable(text)) ImGuiUtil.CopyOnClickSelectable(text, tab.LoadedShpkPathName, tooltip);
ImGui.SetClipboardText(tab.LoadedShpkPathName); ImGuiUtil.CopyOnClickSelectable(devkitText, tab.LoadedShpkDevkitPathName, tooltip);
ImGuiUtil.CopyOnClickSelectable(baseDevkitText, tab.LoadedBaseDevkitPathName, tooltip);
ImGuiUtil.HoverTooltip("Click to copy file path to clipboard.");
if (ImGui.Selectable(devkitText))
ImGui.SetClipboardText(tab.LoadedShpkDevkitPathName);
ImGuiUtil.HoverTooltip("Click to copy file path to clipboard.");
if (ImGui.Selectable(baseDevkitText))
ImGui.SetClipboardText(tab.LoadedBaseDevkitPathName);
ImGuiUtil.HoverTooltip("Click to copy file path to clipboard.");
if (ImGui.Button("Associate Custom .shpk File")) if (ImGui.Button("Associate Custom .shpk File"))
_fileDialog.OpenFilePicker("Associate Custom .shpk File...", ".shpk", (success, name) => _fileDialog.OpenFilePicker("Associate Custom .shpk File...", ".shpk", (success, name) =>
@ -192,11 +182,12 @@ public partial class ModEditWindow
var ret = false; var ret = false;
foreach (var (label, index, description, monoFont, values) in tab.ShaderKeys) foreach (var (label, index, description, monoFont, values) in tab.ShaderKeys)
{ {
using var font = ImRaii.PushFont(UiBuilder.MonoFont, monoFont); using var font = ImRaii.PushFont(UiBuilder.MonoFont, monoFont);
ref var key = ref tab.Mtrl.ShaderPackage.ShaderKeys[index]; ref var key = ref tab.Mtrl.ShaderPackage.ShaderKeys[index];
var shpkKey = tab.AssociatedShpk?.GetMaterialKeyById(key.Category); var shpkKey = tab.AssociatedShpk?.GetMaterialKeyById(key.Category);
var currentValue = key.Value; var currentValue = key.Value;
var (currentLabel, _, currentDescription) = values.FirstOrNull(v => v.Value == currentValue) ?? ($"0x{currentValue:X8}", currentValue, string.Empty); var (currentLabel, _, currentDescription) =
values.FirstOrNull(v => v.Value == currentValue) ?? ($"0x{currentValue:X8}", currentValue, string.Empty);
if (!disabled && shpkKey.HasValue) if (!disabled && shpkKey.HasValue)
{ {
ImGui.SetNextItemWidth(UiHelpers.Scale * 250.0f); ImGui.SetNextItemWidth(UiHelpers.Scale * 250.0f);
@ -216,6 +207,7 @@ public partial class ModEditWindow
ImGuiUtil.SelectableHelpMarker(valueDescription); ImGuiUtil.SelectableHelpMarker(valueDescription);
} }
} }
ImGui.SameLine(); ImGui.SameLine();
if (description.Length > 0) if (description.Length > 0)
ImGuiUtil.LabeledHelpMarker(label, description); ImGuiUtil.LabeledHelpMarker(label, description);
@ -223,10 +215,14 @@ public partial class ModEditWindow
ImGui.TextUnformatted(label); ImGui.TextUnformatted(label);
} }
else if (description.Length > 0 || currentDescription.Length > 0) else if (description.Length > 0 || currentDescription.Length > 0)
{
ImGuiUtil.LabeledHelpMarker($"{label}: {currentLabel}", ImGuiUtil.LabeledHelpMarker($"{label}: {currentLabel}",
description + ((description.Length > 0 && currentDescription.Length > 0) ? "\n\n" : string.Empty) + currentDescription); description + (description.Length > 0 && currentDescription.Length > 0 ? "\n\n" : string.Empty) + currentDescription);
}
else else
{
ImGui.TextUnformatted($"{label}: {currentLabel}"); ImGui.TextUnformatted($"{label}: {currentLabel}");
}
} }
return ret; return ret;
@ -268,7 +264,7 @@ public partial class ModEditWindow
foreach (var (label, constantIndex, slice, description, monoFont, editor) in group) foreach (var (label, constantIndex, slice, description, monoFont, editor) in group)
{ {
var constant = tab.Mtrl.ShaderPackage.Constants[constantIndex]; var constant = tab.Mtrl.ShaderPackage.Constants[constantIndex];
var buffer = tab.Mtrl.GetConstantValues(constant); var buffer = tab.Mtrl.GetConstantValues(constant);
if (buffer.Length > 0) if (buffer.Length > 0)
{ {
using var id = ImRaii.PushId($"##{constant.Id:X8}:{slice.Start}"); using var id = ImRaii.PushId($"##{constant.Id:X8}:{slice.Start}");
@ -277,6 +273,7 @@ public partial class ModEditWindow
ret = true; ret = true;
tab.SetMaterialParameter(constant.Id, slice.Start, buffer[slice]); tab.SetMaterialParameter(constant.Id, slice.Start, buffer[slice]);
} }
ImGui.SameLine(); ImGui.SameLine();
using var font = ImRaii.PushFont(UiBuilder.MonoFont, monoFont); using var font = ImRaii.PushFont(UiBuilder.MonoFont, monoFont);
if (description.Length > 0) if (description.Length > 0)
@ -307,8 +304,8 @@ public partial class ModEditWindow
static bool ComboTextureAddressMode(string label, ref uint samplerFlags, int bitOffset) static bool ComboTextureAddressMode(string label, ref uint samplerFlags, int bitOffset)
{ {
var current = (TextureAddressMode)((samplerFlags >> bitOffset) & 0x3u); var current = (TextureAddressMode)((samplerFlags >> bitOffset) & 0x3u);
using var c = ImRaii.Combo(label, current.ToString()); using var c = ImRaii.Combo(label, current.ToString());
if (!c) if (!c)
return false; return false;
@ -323,6 +320,7 @@ public partial class ModEditWindow
ImGuiUtil.SelectableHelpMarker(TextureAddressModeTooltips[(int)value]); ImGuiUtil.SelectableHelpMarker(TextureAddressModeTooltips[(int)value]);
} }
return ret; return ret;
} }
@ -339,6 +337,7 @@ public partial class ModEditWindow
ret = true; ret = true;
tab.SetSamplerFlags(sampler.SamplerId, sampler.Flags); tab.SetSamplerFlags(sampler.SamplerId, sampler.Flags);
} }
ImGui.SameLine(); ImGui.SameLine();
ImGuiUtil.LabeledHelpMarker("U Address Mode", "Method to use for resolving a U texture coordinate that is outside the 0 to 1 range."); ImGuiUtil.LabeledHelpMarker("U Address Mode", "Method to use for resolving a U texture coordinate that is outside the 0 to 1 range.");
@ -348,6 +347,7 @@ public partial class ModEditWindow
ret = true; ret = true;
tab.SetSamplerFlags(sampler.SamplerId, sampler.Flags); tab.SetSamplerFlags(sampler.SamplerId, sampler.Flags);
} }
ImGui.SameLine(); ImGui.SameLine();
ImGuiUtil.LabeledHelpMarker("V Address Mode", "Method to use for resolving a V texture coordinate that is outside the 0 to 1 range."); ImGuiUtil.LabeledHelpMarker("V Address Mode", "Method to use for resolving a V texture coordinate that is outside the 0 to 1 range.");
@ -355,12 +355,15 @@ public partial class ModEditWindow
ImGui.SetNextItemWidth(UiHelpers.Scale * 100.0f); ImGui.SetNextItemWidth(UiHelpers.Scale * 100.0f);
if (ImGui.DragFloat("##LoDBias", ref lodBias, 0.1f, -8.0f, 7.984375f)) if (ImGui.DragFloat("##LoDBias", ref lodBias, 0.1f, -8.0f, 7.984375f))
{ {
sampler.Flags = (uint)((sampler.Flags & ~0x000FFC00) | (uint)((int)Math.Round(Math.Clamp(lodBias, -8.0f, 7.984375f) * 64.0f) & 0x3FF) << 10); sampler.Flags = (uint)((sampler.Flags & ~0x000FFC00)
ret = true; | ((uint)((int)Math.Round(Math.Clamp(lodBias, -8.0f, 7.984375f) * 64.0f) & 0x3FF) << 10));
ret = true;
tab.SetSamplerFlags(sampler.SamplerId, sampler.Flags); tab.SetSamplerFlags(sampler.SamplerId, sampler.Flags);
} }
ImGui.SameLine(); ImGui.SameLine();
ImGuiUtil.LabeledHelpMarker("Level of Detail Bias", "Offset from the calculated mipmap level.\n\nHigher means that the texture will start to lose detail nearer.\nLower means that the texture will keep its detail until farther."); ImGuiUtil.LabeledHelpMarker("Level of Detail Bias",
"Offset from the calculated mipmap level.\n\nHigher means that the texture will start to lose detail nearer.\nLower means that the texture will keep its detail until farther.");
var minLod = (int)((sampler.Flags >> 20) & 0xF); var minLod = (int)((sampler.Flags >> 20) & 0xF);
ImGui.SetNextItemWidth(UiHelpers.Scale * 100.0f); ImGui.SetNextItemWidth(UiHelpers.Scale * 100.0f);
@ -370,8 +373,10 @@ public partial class ModEditWindow
ret = true; ret = true;
tab.SetSamplerFlags(sampler.SamplerId, sampler.Flags); tab.SetSamplerFlags(sampler.SamplerId, sampler.Flags);
} }
ImGui.SameLine(); ImGui.SameLine();
ImGuiUtil.LabeledHelpMarker("Minimum Level of Detail", "Most detailed mipmap level to use.\n\n0 is the full-sized texture, 1 is the half-sized texture, 2 is the quarter-sized texture, and so on.\n15 will forcibly reduce the texture to its smallest mipmap."); ImGuiUtil.LabeledHelpMarker("Minimum Level of Detail",
"Most detailed mipmap level to use.\n\n0 is the full-sized texture, 1 is the half-sized texture, 2 is the quarter-sized texture, and so on.\n15 will forcibly reduce the texture to its smallest mipmap.");
using var t = ImRaii.TreeNode("Advanced Settings"); using var t = ImRaii.TreeNode("Advanced Settings");
if (!t) if (!t)
@ -413,7 +418,10 @@ public partial class ModEditWindow
GC.KeepAlive(tab); GC.KeepAlive(tab);
var textColor = ImGui.GetColorU32(ImGuiCol.Text); var textColor = ImGui.GetColorU32(ImGuiCol.Text);
var textColorWarning = (textColor & 0xFF000000u) | ((textColor & 0x00FEFEFE) >> 1) | (tab.AssociatedShpk == null ? 0x80u : 0x8080u); // Half red or yellow var textColorWarning =
(textColor & 0xFF000000u)
| ((textColor & 0x00FEFEFE) >> 1)
| (tab.AssociatedShpk == null ? 0x80u : 0x8080u); // Half red or yellow
using var c = ImRaii.PushColor(ImGuiCol.Text, textColorWarning); using var c = ImRaii.PushColor(ImGuiCol.Text, textColorWarning);
@ -443,6 +451,7 @@ public partial class ModEditWindow
_ => null, _ => null,
}; };
} }
private static string VectorSwizzle(int firstComponent, int lastComponent) private static string VectorSwizzle(int firstComponent, int lastComponent)
=> (firstComponent, lastComponent) switch => (firstComponent, lastComponent) switch
{ {