mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-07-18 03:24:15 -04:00
[AK][GUI] Add support for portrait sprites
This commit is contained in:
@ -360,7 +360,7 @@ namespace AssetStudioGUI
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (lastSelectedItem?.Type == ClassIDType.Sprite && !((Sprite)lastSelectedItem.Asset).m_RD.alphaTexture.IsNull)
|
||||
else if ((lastSelectedItem?.Type == ClassIDType.Sprite && !((Sprite)lastSelectedItem.Asset).m_RD.alphaTexture.IsNull) || lastSelectedItem?.Type == ClassIDType.AkPortraitSprite)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
@ -430,6 +430,7 @@ namespace AssetStudioGUI
|
||||
switch (lastSelectedItem.Type)
|
||||
{
|
||||
case ClassIDType.Texture2D:
|
||||
case ClassIDType.AkPortraitSprite:
|
||||
case ClassIDType.Sprite:
|
||||
{
|
||||
if (enablePreview.Checked && imageTexture != null)
|
||||
@ -798,42 +799,45 @@ namespace AssetStudioGUI
|
||||
return;
|
||||
try
|
||||
{
|
||||
switch (assetItem.Asset)
|
||||
switch (assetItem.Type)
|
||||
{
|
||||
case Texture2D m_Texture2D:
|
||||
PreviewTexture2D(assetItem, m_Texture2D);
|
||||
case ClassIDType.Texture2D:
|
||||
PreviewTexture2D(assetItem, assetItem.Asset as Texture2D);
|
||||
break;
|
||||
case AudioClip m_AudioClip:
|
||||
PreviewAudioClip(assetItem, m_AudioClip);
|
||||
case ClassIDType.AudioClip:
|
||||
PreviewAudioClip(assetItem, assetItem.Asset as AudioClip);
|
||||
break;
|
||||
case Shader m_Shader:
|
||||
PreviewShader(m_Shader);
|
||||
case ClassIDType.Shader:
|
||||
PreviewShader(assetItem.Asset as Shader);
|
||||
break;
|
||||
case TextAsset m_TextAsset:
|
||||
PreviewTextAsset(m_TextAsset);
|
||||
case ClassIDType.TextAsset:
|
||||
PreviewTextAsset(assetItem.Asset as TextAsset);
|
||||
break;
|
||||
case MonoBehaviour m_MonoBehaviour:
|
||||
PreviewMonoBehaviour(m_MonoBehaviour);
|
||||
case ClassIDType.MonoBehaviour:
|
||||
PreviewMonoBehaviour(assetItem.Asset as MonoBehaviour);
|
||||
break;
|
||||
case Font m_Font:
|
||||
PreviewFont(m_Font);
|
||||
case ClassIDType.Font:
|
||||
PreviewFont(assetItem.Asset as Font);
|
||||
break;
|
||||
case Mesh m_Mesh:
|
||||
PreviewMesh(m_Mesh);
|
||||
case ClassIDType.Mesh:
|
||||
PreviewMesh(assetItem.Asset as Mesh);
|
||||
break;
|
||||
case VideoClip m_VideoClip:
|
||||
PreviewVideoClip(assetItem, m_VideoClip);
|
||||
case ClassIDType.VideoClip:
|
||||
PreviewVideoClip(assetItem, assetItem.Asset as VideoClip);
|
||||
break;
|
||||
case MovieTexture _:
|
||||
case ClassIDType.MovieTexture:
|
||||
StatusStripUpdate("Only supported export.");
|
||||
break;
|
||||
case Sprite m_Sprite:
|
||||
PreviewSprite(assetItem, m_Sprite);
|
||||
case ClassIDType.Sprite:
|
||||
PreviewSprite(assetItem, assetItem.Asset as Sprite);
|
||||
break;
|
||||
case Animator _:
|
||||
case ClassIDType.AkPortraitSprite:
|
||||
PreviewAkPortraitSprite(assetItem);
|
||||
break;
|
||||
case ClassIDType.Animator:
|
||||
StatusStripUpdate("Can be exported to FBX file.");
|
||||
break;
|
||||
case AnimationClip _:
|
||||
case ClassIDType.AnimationClip:
|
||||
StatusStripUpdate("Can be exported with Animator or Objects");
|
||||
break;
|
||||
default:
|
||||
@ -1344,6 +1348,25 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
|
||||
private void PreviewAkPortraitSprite(AssetItem assetItem)
|
||||
{
|
||||
var image = assetItem.AkPortraitSprite.AkGetImage(spriteMaskMode: spriteMaskVisibleMode);
|
||||
if (image != null)
|
||||
{
|
||||
var bitmap = new DirectBitmap(image);
|
||||
image.Dispose();
|
||||
assetItem.InfoText = $"Width: {bitmap.Width}\nHeight: {bitmap.Height}\n";
|
||||
assetItem.InfoText += $"Alpha mask: {spriteMaskVisibleMode}";
|
||||
PreviewTexture(bitmap);
|
||||
|
||||
StatusStripUpdate("'Ctrl'+'A' - Enable/Disable alpha mask usage. 'Ctrl'+'M' - Show alpha mask only.");
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusStripUpdate("Unsupported sprite for preview.");
|
||||
}
|
||||
}
|
||||
|
||||
private void PreviewTexture(DirectBitmap bitmap)
|
||||
{
|
||||
imageTexture?.Dispose();
|
||||
@ -1449,19 +1472,20 @@ namespace AssetStudioGUI
|
||||
var assetItem = (AssetItem)assetListView.Items[i];
|
||||
if (assetItem.Type == ClassIDType.Sprite)
|
||||
{
|
||||
var sprite = (Sprite)assetItem.Asset;
|
||||
var m_Sprite = (Sprite)assetItem.Asset;
|
||||
if (akFixFaceSpriteNamesToolStripMenuItem.Checked)
|
||||
{
|
||||
if ((sprite.m_Name.Length < 3 && sprite.m_Name.All(char.IsDigit)) //not grouped ("spriteIndex")
|
||||
|| (sprite.m_Name.Length < 5 && sprite.m_Name.Contains('$') && sprite.m_Name.Split('$')[0].All(char.IsDigit))) //grouped ("spriteIndex$groupIndex")
|
||||
var groupedPattern = new Regex(@"^\d{1,2}\$\d{1,2}$"); // "spriteIndex$groupIndex"
|
||||
var notGroupedPattern = new Regex(@"^\d{1,2}$"); // "spriteIndex"
|
||||
if (groupedPattern.IsMatch(m_Sprite.m_Name) || notGroupedPattern.IsMatch(m_Sprite.m_Name))
|
||||
{
|
||||
var fullName = Path.GetFileNameWithoutExtension(assetItem.Container);
|
||||
assetItem.Text = $"{fullName}#{sprite.m_Name}";
|
||||
assetItem.Text = $"{fullName}#{m_Sprite.m_Name}";
|
||||
}
|
||||
}
|
||||
else if (assetItem.Text != sprite.m_Name)
|
||||
else if (assetItem.Text != m_Sprite.m_Name)
|
||||
{
|
||||
assetItem.Text = sprite.m_Name;
|
||||
assetItem.Text = m_Sprite.m_Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1968,7 +1992,7 @@ namespace AssetStudioGUI
|
||||
Properties.Settings.Default.useExternalAlpha = akUseExternalAlphaToolStripMenuItem.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
if (lastSelectedItem?.Asset.type == ClassIDType.Sprite)
|
||||
if (lastSelectedItem?.Type == ClassIDType.Sprite)
|
||||
{
|
||||
StatusStripUpdate("");
|
||||
PreviewAsset(lastSelectedItem);
|
||||
|
Reference in New Issue
Block a user