THis is the current stuff.

This commit is contained in:
Ottermandias 2023-01-02 18:22:56 +01:00
parent 1a4672a901
commit 99f87c744b
11 changed files with 24 additions and 3977 deletions

View file

@ -21,6 +21,7 @@ public class Dalamud
[PluginService][RequiredVersion("1.0")] public static CommandManager Commands { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public static DataManager GameData { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public static ClientState ClientState { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public static GameGui GameGui { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public static ChatGui Chat { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public static Framework Framework { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public static TargetManager Targets { get; private set; } = null!;

View file

@ -36,7 +36,6 @@ public class Glamourer : IDalamudPlugin
public static PenumbraAttach Penumbra = null!;
public static ICustomizationManager Customization = null!;
public static RestrictedGear RestrictedGear = null!;
public static ModelData Models = null!;
public static RedrawManager RedrawManager = null!;
public readonly FixedDesigns FixedDesigns;
public readonly CurrentManipulations CurrentManipulations;
@ -57,14 +56,12 @@ public class Glamourer : IDalamudPlugin
Log = new Logger();
Customization = CustomizationManager.Create(Dalamud.PluginInterface, Dalamud.GameData);
RestrictedGear = GameData.RestrictedGear(Dalamud.GameData);
Models = GameData.Models(Dalamud.GameData);
Config = GlamourerConfig.Load();
Identifier = global::Penumbra.GameData.GameData.GetIdentifier(Dalamud.PluginInterface, Dalamud.GameData);
Penumbra = new PenumbraAttach(Config.AttachToPenumbra);
Actors = new ActorManager(Dalamud.PluginInterface, Dalamud.Objects, Dalamud.ClientState, Dalamud.GameData,
Actors = new ActorManager(Dalamud.PluginInterface, Dalamud.Objects, Dalamud.ClientState, Dalamud.GameData, Dalamud.GameGui,
i => (short)Penumbra.CutsceneParent(i));
FixedDesigns = new FixedDesigns();
CurrentManipulations = new CurrentManipulations();

View file

@ -5,18 +5,21 @@ using Glamourer.Customization;
using Glamourer.Interop;
using ImGuiNET;
using OtterGui.Raii;
using OtterGui.Widgets;
using Penumbra.GameData.Data;
using Penumbra.GameData.Enums;
using Penumbra.GameData.Structs;
namespace Glamourer.Gui.Equipment;
public enum ApplicationFlags
{
}
{ }
public partial class EquipmentDrawer
{
private static readonly FilterComboColors _stainCombo;
private static readonly StainData _stainData;
private Race _race;
private Gender _gender;
private CharacterEquip _equip;
@ -28,8 +31,9 @@ public partial class EquipmentDrawer
static EquipmentDrawer()
{
Stains = GameData.Stains(Dalamud.GameData);
StainCombo = new FilterStainCombo(140);
_stainData = new StainData(Dalamud.PluginInterface, Dalamud.GameData, Dalamud.GameData.Language);
_stainCombo = new FilterComboColors(140,
_stainData.Data.Prepend(new KeyValuePair<byte, (string Name, uint Dye, bool Gloss)>(0, ("None", 0, false))));
Identifier = Glamourer.Identifier;
ItemCombos = EquipSlotExtensions.EqdpSlots.Select(s => new ItemCombo(s)).ToArray();
MainHandCombo = new WeaponCombo(EquipSlot.MainHand);
@ -76,25 +80,31 @@ public partial class EquipmentDrawer
d.DrawInternal(ref mainHand, ref offHand, ref flags);
}
private void DrawStainCombo()
{
var found = _stainData.TryGetValue(_currentArmor.Stain, out var stain);
_stainCombo.Draw("##stain", stain.RgbaColor, found);
}
private void DrawInternal(ref CharacterWeapon mainHand, ref CharacterWeapon offHand)
{
foreach (var slot in EquipSlotExtensions.EqdpSlots)
{
using var id = SetSlot(slot);
DrawStainSelector();
DrawStainCombo();
ImGui.SameLine();
DrawItemSelector();
}
_currentSlot = EquipSlot.MainHand;
DrawStainSelector();
DrawStainCombo();
ImGui.SameLine();
DrawMainHandSelector(ref mainHand);
var offhand = MainHandCombo.LastCategory.AllowsOffHand();
if (offhand != WeaponCategory.Unknown)
{
_currentSlot = EquipSlot.OffHand;
DrawStainSelector();
DrawStainCombo();
ImGui.SameLine();
DrawOffHandSelector(ref offHand, offhand);
}
@ -107,7 +117,7 @@ public partial class EquipmentDrawer
using var id = SetSlot(slot);
DrawCheckbox(ref flags);
ImGui.SameLine();
DrawStainSelector();
DrawStainCombo();
ImGui.SameLine();
DrawItemSelector();
}
@ -115,7 +125,7 @@ public partial class EquipmentDrawer
_currentSlot = EquipSlot.MainHand;
DrawCheckbox(ref flags);
ImGui.SameLine();
DrawStainSelector();
DrawStainCombo();
ImGui.SameLine();
DrawMainHandSelector(ref mainHand);
var offhand = MainHandCombo.LastCategory.AllowsOffHand();
@ -124,7 +134,7 @@ public partial class EquipmentDrawer
_currentSlot = EquipSlot.OffHand;
DrawCheckbox(ref flags);
ImGui.SameLine();
DrawStainSelector();
DrawStainCombo();
ImGui.SameLine();
DrawOffHandSelector(ref offHand, offhand);
}

View file

@ -1,92 +1,10 @@
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Dalamud.Interface;
using Glamourer.State;
using ImGuiNET;
using ImGuiNET;
using OtterGui;
using OtterGui.Raii;
using OtterGui.Widgets;
using Penumbra.GameData.Enums;
using Penumbra.GameData.Structs;
using Stain = Glamourer.Structs.Stain;
namespace Glamourer.Gui.Equipment;
public partial class EquipmentDrawer
{
private static readonly IReadOnlyDictionary<StainId, Stain> Stains;
private static readonly FilterStainCombo StainCombo;
private sealed class FilterStainCombo : FilterComboBase<Stain>
{
private readonly float _comboWidth;
private Vector2 _buttonSize;
public ImRaii.Color Color = new();
public FilterStainCombo(float comboWidth)
: base(Stains.Values.ToArray(), false)
=> _comboWidth = comboWidth;
protected override float GetFilterWidth()
{
// Hack to not color the filter frame.
Color.Pop();
return _buttonSize.X + ImGui.GetStyle().ScrollbarSize;
}
protected override void DrawList(float width, float itemHeight)
{
using var style = ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, Vector2.Zero)
.Push(ImGuiStyleVar.WindowPadding, Vector2.Zero)
.Push(ImGuiStyleVar.FrameRounding, 0);
_buttonSize = new Vector2(_comboWidth * ImGuiHelpers.GlobalScale, 0);
if (ImGui.GetScrollMaxY() > 0)
_buttonSize.X += ImGui.GetStyle().ScrollbarSize;
base.DrawList(width, itemHeight);
}
protected override string ToString(Stain obj)
=> obj.Name;
protected override bool DrawSelectable(int globalIdx, bool selected)
{
var stain = Items[globalIdx];
// Push the stain color to type and if it is too bright, turn the text color black.
using var colors = ImRaii.PushColor(ImGuiCol.Button, stain.RgbaColor)
.Push(ImGuiCol.Text, 0xFF101010, stain.Intensity > 127)
.Push(ImGuiCol.Border, 0xFF2020D0, selected);
using var style = ImRaii.PushStyle(ImGuiStyleVar.FrameBorderSize, 2f * ImGuiHelpers.GlobalScale, selected);
return ImGui.Button(stain.Name, _buttonSize);
}
}
private void DrawStainSelector()
{
var foundIdx = StainCombo.Items.IndexOf(s => s.RowIndex.Equals(_currentArmor.Stain));
var stain = foundIdx >= 0 ? StainCombo.Items[foundIdx] : default;
StainCombo.Color.Push(ImGuiCol.FrameBg, stain.RgbaColor, foundIdx >= 0);
var change = StainCombo.Draw("##stainSelector", string.Empty, ref foundIdx, ImGui.GetFrameHeight(), ImGui.GetFrameHeight(),
ImGuiComboFlags.NoArrowButton);
StainCombo.Color.Pop();
if (!change && (byte)_currentArmor.Stain != 0)
{
ImGuiUtil.HoverTooltip($"{stain.Name}\nRight-click to clear.");
if (ImGui.IsItemClicked(ImGuiMouseButton.Right))
{
change = true;
foundIdx = -1;
}
}
if (change)
{
_currentArmor = new CharacterArmor(_currentArmor.Set, _currentArmor.Variant,
foundIdx >= 0 ? StainCombo.Items[foundIdx].RowIndex : Stain.None.RowIndex);
UpdateActors();
}
}
private void DrawCheckbox(ref ApplicationFlags flags)
=> DrawCheckbox("##checkbox", "Enable writing this slot in this save.", ref flags, 0);

View file

@ -5,7 +5,6 @@ using ImGuiNET;
using Penumbra.GameData.Enums;
using Lumina.Excel.GeneratedSheets;
using Item = Glamourer.Structs.Item;
using Stain = Glamourer.Structs.Stain;
namespace Glamourer.Gui;