Auto-generate ID from a name through CRC when adding a param

This commit is contained in:
Exter-N 2023-02-16 19:15:40 +01:00 committed by Ottermandias
parent 33231959b2
commit 86de28245d

View file

@ -7,14 +7,12 @@ using Dalamud.Interface.ImGuiFileDialog;
using Dalamud.Interface.Internal.Notifications; using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface; using Dalamud.Interface;
using ImGuiNET; using ImGuiNET;
using Lumina.Misc;
using OtterGui.Raii; using OtterGui.Raii;
using OtterGui; using OtterGui;
using Penumbra.GameData.Data; using Penumbra.GameData.Data;
using Penumbra.GameData.Files; using Penumbra.GameData.Files;
using Penumbra.Util; using Penumbra.Util;
using Lumina.Data.Parsing;
using static OtterGui.Raii.ImRaii;
using static Penumbra.GameData.Files.ShpkFile;
namespace Penumbra.UI.Classes; namespace Penumbra.UI.Classes;
@ -24,7 +22,8 @@ public partial class ModEditWindow
private readonly FileDialogManager _shaderPackageFileDialog = ConfigWindow.SetupFileManager(); private readonly FileDialogManager _shaderPackageFileDialog = ConfigWindow.SetupFileManager();
private uint _shaderPackageNewMaterialParamId = 0; private string _shaderPackageNewMaterialParamName = string.Empty;
private uint _shaderPackageNewMaterialParamId = Crc32.Get( string.Empty, 0xFFFFFFFFu );
private ushort _shaderPackageNewMaterialParamStart = 0; private ushort _shaderPackageNewMaterialParamStart = 0;
private ushort _shaderPackageNewMaterialParamEnd = 0; private ushort _shaderPackageNewMaterialParamEnd = 0;
@ -254,7 +253,7 @@ public partial class ModEditWindow
for( var idx = 0; idx < parameters.Length; idx += 4 ) for( var idx = 0; idx < parameters.Length; idx += 4 )
{ {
var usedComponents = materialParams?.Used?[idx >> 2] ?? DisassembledShader.VectorComponents.All; var usedComponents = ( materialParams?.Used?[idx >> 2] ?? DisassembledShader.VectorComponents.All ) | ( materialParams?.UsedDynamically ?? 0 );
ImGui.TableNextColumn(); ImGui.TableNextColumn();
ImGui.Text( $"[{idx >> 2}]" ); ImGui.Text( $"[{idx >> 2}]" );
for( var col = 0; col < 4; ++col ) for( var col = 0; col < 4; ++col )
@ -297,7 +296,7 @@ public partial class ModEditWindow
for( var i = 0; i < file.MaterialParams.Length; ++i ) for( var i = 0; i < file.MaterialParams.Length; ++i )
{ {
var param = file.MaterialParams[i]; var param = file.MaterialParams[i];
using var t2 = ImRaii.TreeNode( $"{MaterialParamRangeName(materialParams?.Name ?? string.Empty, param.ByteOffset >> 2, param.ByteSize >> 2).Item1} (ID: 0x{param.Id:X8})" ); using var t2 = ImRaii.TreeNode( $"{MaterialParamRangeName( materialParams?.Name ?? string.Empty, param.ByteOffset >> 2, param.ByteSize >> 2 ).Item1} (ID: 0x{param.Id:X8})" );
if( t2 ) if( t2 )
{ {
if( ImGui.Button( "Remove" ) ) if( ImGui.Button( "Remove" ) )
@ -359,12 +358,13 @@ public partial class ModEditWindow
} }
} }
} }
var id = ( int )_shaderPackageNewMaterialParamId; ImGui.SetNextItemWidth( ImGuiHelpers.GlobalScale * 225.0f );
ImGui.SetNextItemWidth( ImGuiHelpers.GlobalScale * 150.0f ); if( ImGui.InputText( $"Name", ref _shaderPackageNewMaterialParamName, 63 ) )
if( ImGui.InputInt( "ID", ref id, 0, 0, ImGuiInputTextFlags.CharsHexadecimal ) )
{ {
_shaderPackageNewMaterialParamId = ( uint )id; _shaderPackageNewMaterialParamId = Crc32.Get( _shaderPackageNewMaterialParamName, 0xFFFFFFFFu );
} }
ImGui.SameLine();
ImGui.Text( $"(ID: 0x{_shaderPackageNewMaterialParamId:X8})" );
if( ImGui.Button( "Add" ) ) if( ImGui.Button( "Add" ) )
{ {
if( definedParameters.Contains( _shaderPackageNewMaterialParamId ) ) if( definedParameters.Contains( _shaderPackageNewMaterialParamId ) )