Resource Tree: Add ChangedItem-like icons, make UI prettier

This commit is contained in:
Exter-N 2023-09-01 06:06:42 +02:00
parent db521dd21c
commit 30c622c085
8 changed files with 139 additions and 95 deletions

View file

@ -2,12 +2,14 @@ using System;
using System.Collections.Generic;
using Penumbra.GameData.Enums;
using Penumbra.String.Classes;
using ChangedItemIcon = Penumbra.UI.ChangedItemDrawer.ChangedItemIcon;
namespace Penumbra.Interop.ResourceTree;
public class ResourceNode
{
public readonly string? Name;
public readonly ChangedItemIcon Icon;
public readonly ResourceType Type;
public readonly nint ObjectAddress;
public readonly nint ResourceHandle;
@ -18,9 +20,11 @@ public class ResourceNode
public readonly bool Internal;
public readonly List<ResourceNode> Children;
public ResourceNode(string? name, ResourceType type, nint objectAddress, nint resourceHandle, Utf8GamePath gamePath, FullPath fullPath, ulong length, bool @internal)
public ResourceNode(UIData uiData, ResourceType type, nint objectAddress, nint resourceHandle, Utf8GamePath gamePath, FullPath fullPath,
ulong length, bool @internal)
{
Name = name;
Name = uiData.Name;
Icon = uiData.Icon;
Type = type;
ObjectAddress = objectAddress;
ResourceHandle = resourceHandle;
@ -35,10 +39,11 @@ public class ResourceNode
Children = new List<ResourceNode>();
}
public ResourceNode(string? name, ResourceType type, nint objectAddress, nint resourceHandle, Utf8GamePath[] possibleGamePaths, FullPath fullPath,
public ResourceNode(UIData uiData, ResourceType type, nint objectAddress, nint resourceHandle, Utf8GamePath[] possibleGamePaths, FullPath fullPath,
ulong length, bool @internal)
{
Name = name;
Name = uiData.Name;
Icon = uiData.Icon;
Type = type;
ObjectAddress = objectAddress;
ResourceHandle = resourceHandle;
@ -50,9 +55,10 @@ public class ResourceNode
Children = new List<ResourceNode>();
}
private ResourceNode(string? name, ResourceNode originalResourceNode)
private ResourceNode(UIData uiData, ResourceNode originalResourceNode)
{
Name = name;
Name = uiData.Name;
Icon = uiData.Icon;
Type = originalResourceNode.Type;
ObjectAddress = originalResourceNode.ObjectAddress;
ResourceHandle = originalResourceNode.ResourceHandle;
@ -64,6 +70,15 @@ public class ResourceNode
Children = originalResourceNode.Children;
}
public ResourceNode WithName(string? name)
=> string.Equals(Name, name, StringComparison.Ordinal) ? this : new ResourceNode(name, this);
public ResourceNode WithUIData(string? name, ChangedItemIcon icon)
=> string.Equals(Name, name, StringComparison.Ordinal) && Icon == icon ? this : new ResourceNode(new(name, icon), this);
public ResourceNode WithUIData(UIData uiData)
=> string.Equals(Name, uiData.Name, StringComparison.Ordinal) && Icon == uiData.Icon ? this : new ResourceNode(uiData, this);
public readonly record struct UIData(string? Name, ChangedItemIcon Icon)
{
public readonly UIData PrependName(string prefix)
=> Name == null ? this : new(prefix + Name, Icon);
}
}