From e79ee55f3b7a755658057d9205c43b5e4852623e Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Fri, 2 Jun 2023 23:21:07 +0200 Subject: [PATCH] Make some stuff work. --- Glamourer.GameData/Customization/Customize.cs | 7 ++- Glamourer/Designs/Design.cs | 2 +- Glamourer/Designs/ModelData.cs | 4 +- Glamourer/Gui/ActorDebug.cs | 57 +++++++++++++++++++ .../Gui/Customization/CustomizationDrawer.cs | 2 - Glamourer/Gui/Interface.Actors.cs | 2 + Glamourer/Gui/Interface.DesignTab.cs | 5 +- Glamourer/State/ActiveDesign.Manager.cs | 2 - 8 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 Glamourer/Gui/ActorDebug.cs diff --git a/Glamourer.GameData/Customization/Customize.cs b/Glamourer.GameData/Customization/Customize.cs index a43adbe..7c90088 100644 --- a/Glamourer.GameData/Customization/Customize.cs +++ b/Glamourer.GameData/Customization/Customize.cs @@ -61,7 +61,12 @@ public unsafe struct Customize private static Customize GenerateDefault() { - var ret = new Customize(); + var ret = new Customize + { + Race = Race.Hyur, + Clan = SubRace.Midlander, + Gender = Gender.Male, + }; ret.Set(CustomizeIndex.BodyType, (CustomizeValue)1); ret.Set(CustomizeIndex.Height, (CustomizeValue)50); ret.Set(CustomizeIndex.Face, (CustomizeValue)1); diff --git a/Glamourer/Designs/Design.cs b/Glamourer/Designs/Design.cs index 09283c0..4114df3 100644 --- a/Glamourer/Designs/Design.cs +++ b/Glamourer/Designs/Design.cs @@ -247,7 +247,7 @@ public partial class Design : DesignData, ISavable if (json == null) return true; - var customize = design.ModelData.Customize; + ref var customize = ref design.ModelData.Customize; foreach (var idx in Enum.GetValues()) { var tok = json[idx.ToString()]; diff --git a/Glamourer/Designs/ModelData.cs b/Glamourer/Designs/ModelData.cs index 5f2b914..f47fffa 100644 --- a/Glamourer/Designs/ModelData.cs +++ b/Glamourer/Designs/ModelData.cs @@ -54,7 +54,7 @@ public struct ModelData public ModelData(CharacterWeapon mainHand) => MainHand = mainHand; - public CharacterArmor Armor(EquipSlot slot) + public readonly CharacterArmor Armor(EquipSlot slot) => slot switch { EquipSlot.MainHand => MainHand.ToArmor(), @@ -72,7 +72,7 @@ public struct ModelData _ => CharacterArmor.Empty, }; - public CharacterWeapon Piece(EquipSlot slot) + public readonly CharacterWeapon Piece(EquipSlot slot) => slot switch { EquipSlot.MainHand => MainHand, diff --git a/Glamourer/Gui/ActorDebug.cs b/Glamourer/Gui/ActorDebug.cs new file mode 100644 index 0000000..70cd4de --- /dev/null +++ b/Glamourer/Gui/ActorDebug.cs @@ -0,0 +1,57 @@ +using Glamourer.Designs; +using ImGuiNET; +using OtterGui; +using OtterGui.Raii; +using Penumbra.GameData.Enums; + +namespace Glamourer.Gui; + +public static class ActorDebug +{ + /// Draw the model data values as straight table data without evaluation. + public static unsafe void Draw(in ModelData model) + { + using var table = ImRaii.Table("##drawObjectData", 3, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg); + if (!table) + return; + + ImGuiUtil.DrawTableColumn("Model ID"); + ImGuiUtil.DrawTableColumn(model.ModelId.ToString()); + ImGuiUtil.DrawTableColumn(model.ModelId.ToString("X8")); + + for (var i = 0; i < Penumbra.GameData.Structs.CustomizeData.Size; ++i) + { + ImGuiUtil.DrawTableColumn($"Customize[{i:D2}]"); + ImGuiUtil.DrawTableColumn(model.Customize.Data.Data[i].ToString()); + ImGuiUtil.DrawTableColumn(model.Customize.Data.Data[i].ToString("X2")); + } + ImGuiUtil.DrawTableColumn("Race"); + ImGuiUtil.DrawTableColumn(model.Customize.Race.ToString()); + ImGui.TableNextColumn(); + + ImGuiUtil.DrawTableColumn("Clan"); + ImGuiUtil.DrawTableColumn(model.Customize.Clan.ToString()); + ImGui.TableNextColumn(); + + ImGuiUtil.DrawTableColumn("Gender"); + ImGuiUtil.DrawTableColumn(model.Customize.Gender.ToString()); + ImGui.TableNextColumn(); + + for (var i = 0; i < 10; ++i) + { + var slot = EquipSlotExtensions.EqdpSlots[i]; + ImGuiUtil.DrawTableColumn($"Equipment[{i}] ({slot})"); + var armor = model.Armor(slot); + ImGuiUtil.DrawTableColumn($"{armor.Set.Value}, {armor.Variant}, {armor.Stain.Value}"); + ImGuiUtil.DrawTableColumn(armor.Value.ToString("X8")); + } + + ImGuiUtil.DrawTableColumn("Mainhand"); + ImGuiUtil.DrawTableColumn($"{model.MainHand.Set.Value}, {model.MainHand.Type.Value}, {model.MainHand.Variant}, {model.MainHand.Stain.Value}"); + ImGuiUtil.DrawTableColumn(model.MainHand.Value.ToString("X16")); + + ImGuiUtil.DrawTableColumn("Offhand"); + ImGuiUtil.DrawTableColumn($"{model.OffHand.Set.Value}, {model.OffHand.Type.Value}, {model.OffHand.Variant}, {model.OffHand.Stain.Value}"); + ImGuiUtil.DrawTableColumn(model.OffHand.Value.ToString("X16")); + } +} diff --git a/Glamourer/Gui/Customization/CustomizationDrawer.cs b/Glamourer/Gui/Customization/CustomizationDrawer.cs index 51b0399..f3c111a 100644 --- a/Glamourer/Gui/Customization/CustomizationDrawer.cs +++ b/Glamourer/Gui/Customization/CustomizationDrawer.cs @@ -1,14 +1,12 @@ using System; using System.Numerics; using System.Reflection; -using System.Runtime.InteropServices; using Dalamud.Plugin; using Glamourer.Customization; using Glamourer.Services; using ImGuiNET; using OtterGui; using OtterGui.Raii; -using CustomizeData = Penumbra.GameData.Structs.CustomizeData; namespace Glamourer.Gui.Customization; diff --git a/Glamourer/Gui/Interface.Actors.cs b/Glamourer/Gui/Interface.Actors.cs index 413a498..fee5bbb 100644 --- a/Glamourer/Gui/Interface.Actors.cs +++ b/Glamourer/Gui/Interface.Actors.cs @@ -72,6 +72,8 @@ public partial class Interface _currentSave.Initialize(_items, _currentData.Objects[0]); RevertButton(); + ActorDebug.Draw(_currentSave.ModelData); + return; if (_main._customizationDrawer.Draw(_currentSave.ModelData.Customize, _identifier.Type == IdentifierType.Special)) _activeDesigns.ChangeCustomize(_currentSave, _main._customizationDrawer.Changed, _main._customizationDrawer.Customize.Data, false); diff --git a/Glamourer/Gui/Interface.DesignTab.cs b/Glamourer/Gui/Interface.DesignTab.cs index 40a92dc..b1ef074 100644 --- a/Glamourer/Gui/Interface.DesignTab.cs +++ b/Glamourer/Gui/Interface.DesignTab.cs @@ -2,15 +2,12 @@ using System.Numerics; using Dalamud.Game.ClientState.Keys; using Dalamud.Interface; -using FFXIVClientStructs.FFXIV.Client.Game.InstanceContent; using Glamourer.Customization; using Glamourer.Designs; using Glamourer.Gui.Designs; using Glamourer.Interop; -using Glamourer.Services; using Glamourer.State; using ImGuiNET; -using Microsoft.VisualBasic; using OtterGui; using OtterGui.Raii; using Penumbra.GameData.Enums; @@ -72,13 +69,13 @@ public partial class Interface return; using var group = ImRaii.Group(); - ApplySelfButton(); using var child = ImRaii.Child("##DesignPanel", new Vector2(-0.001f), true, ImGuiWindowFlags.HorizontalScrollbar); if (!child) return; + ActorDebug.Draw(Selector.Selected.ModelData); _main._customizationDrawer.Draw(Selector.Selected.ModelData.Customize, CustomizeFlagExtensions.All, true); foreach (var slot in EquipSlotExtensions.EqdpSlots) { diff --git a/Glamourer/State/ActiveDesign.Manager.cs b/Glamourer/State/ActiveDesign.Manager.cs index b7c65ab..bb55a30 100644 --- a/Glamourer/State/ActiveDesign.Manager.cs +++ b/Glamourer/State/ActiveDesign.Manager.cs @@ -4,7 +4,6 @@ using Glamourer.Interop; using Penumbra.GameData.Actors; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; using FFXIVClientStructs.FFXIV.Client.Game.Object; using Glamourer.Api; using Glamourer.Customization; @@ -14,7 +13,6 @@ using Penumbra.Api.Enums; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; using CustomizeData = Penumbra.GameData.Structs.CustomizeData; -using Object = FFXIVClientStructs.FFXIV.Client.Graphics.Scene.Object; namespace Glamourer.State;