v0.80.65
This commit is contained in:
@@ -94,8 +94,11 @@
|
||||
<setting name="exportUV0UV1" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="exportableTypes" serializeAs="String">
|
||||
<value>{"GameObject":true,"Material":true,"Texture2D":true,"Mesh":true,"Renderer":true,"Shader":true,"TextAsset":true,"AnimationClip":true,"Font":true,"Sprite":true,"Animator":true,"MiHoYoBinData":true,"AssetBundle":true}</value>
|
||||
<setting name="disableShader" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="disableRenderer" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</AssetStudioGUI.Properties.Settings>
|
||||
</userSettings>
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<TargetFrameworks>net6.0-windows;net7.0-windows</TargetFrameworks>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ApplicationIcon>Resources\as.ico</ApplicationIcon>
|
||||
<Version>0.80.30</Version>
|
||||
<AssemblyVersion>0.80.30</AssemblyVersion>
|
||||
<FileVersion>0.80.30</FileVersion>
|
||||
<Version>0.80.65</Version>
|
||||
<AssemblyVersion>0.80.65</AssemblyVersion>
|
||||
<FileVersion>0.80.65</FileVersion>
|
||||
<Copyright>Copyright © Razmoth 2022; Copyright © Perfare 2018-2022</Copyright>
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
111
AssetStudioGUI/AssetStudioGUIForm.Designer.cs
generated
111
AssetStudioGUI/AssetStudioGUIForm.Designer.cs
generated
@@ -92,16 +92,18 @@ namespace AssetStudioGUI
|
||||
enableConsole = new System.Windows.Forms.ToolStripMenuItem();
|
||||
clearConsoleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
MapNameComboBox = new System.Windows.Forms.ToolStripComboBox();
|
||||
buildBothToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
clearMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
||||
assetMapNameTextBox = new System.Windows.Forms.ToolStripTextBox();
|
||||
buildAssetMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
assetMapTypeComboBox = new System.Windows.Forms.ToolStripComboBox();
|
||||
toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
||||
loadAIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
assetHelpersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
MapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
MapNameComboBox = new System.Windows.Forms.ToolStripComboBox();
|
||||
toolStripMenuItem20 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
toolStripMenuItem21 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
assetMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
assetMapNameTextBox = new System.Windows.Forms.ToolStripTextBox();
|
||||
toolStripMenuItem22 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
assetMapTypeComboBox = new System.Windows.Forms.ToolStripComboBox();
|
||||
loadAIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
|
||||
splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||
tabControl1 = new System.Windows.Forms.TabControl();
|
||||
@@ -153,6 +155,7 @@ namespace AssetStudioGUI
|
||||
exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
buildMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
menuStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
|
||||
splitContainer1.Panel1.SuspendLayout();
|
||||
@@ -597,25 +600,11 @@ namespace AssetStudioGUI
|
||||
//
|
||||
// miscToolStripMenuItem
|
||||
//
|
||||
miscToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { assetHelpersToolStripMenuItem, loadAIToolStripMenuItem });
|
||||
miscToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { MapNameComboBox, buildMapToolStripMenuItem, buildBothToolStripMenuItem, clearMapToolStripMenuItem, toolStripSeparator7, assetMapNameTextBox, buildAssetMapToolStripMenuItem, assetMapTypeComboBox, toolStripSeparator8, loadAIToolStripMenuItem });
|
||||
miscToolStripMenuItem.Name = "miscToolStripMenuItem";
|
||||
miscToolStripMenuItem.Size = new System.Drawing.Size(47, 20);
|
||||
miscToolStripMenuItem.Text = "Misc.";
|
||||
//
|
||||
// assetHelpersToolStripMenuItem
|
||||
//
|
||||
assetHelpersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { MapToolStripMenuItem, assetMapToolStripMenuItem });
|
||||
assetHelpersToolStripMenuItem.Name = "assetHelpersToolStripMenuItem";
|
||||
assetHelpersToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
|
||||
assetHelpersToolStripMenuItem.Text = "Asset Helpers";
|
||||
assetHelpersToolStripMenuItem.DropDownOpening += assetHelpersToolStripMenuItem_DropDownOpening;
|
||||
//
|
||||
// MapToolStripMenuItem
|
||||
//
|
||||
MapToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { MapNameComboBox, toolStripMenuItem20, toolStripMenuItem21 });
|
||||
MapToolStripMenuItem.Name = "MapToolStripMenuItem";
|
||||
MapToolStripMenuItem.Size = new System.Drawing.Size(126, 22);
|
||||
MapToolStripMenuItem.Text = "Map";
|
||||
miscToolStripMenuItem.DropDownOpening += miscToolStripMenuItem_DropDownOpening;
|
||||
//
|
||||
// MapNameComboBox
|
||||
//
|
||||
@@ -623,26 +612,31 @@ namespace AssetStudioGUI
|
||||
MapNameComboBox.Size = new System.Drawing.Size(121, 23);
|
||||
MapNameComboBox.ToolTipText = "Enter name of Map here";
|
||||
//
|
||||
// toolStripMenuItem20
|
||||
// buildMapToolStripMenuItem
|
||||
//
|
||||
toolStripMenuItem20.Name = "toolStripMenuItem20";
|
||||
toolStripMenuItem20.Size = new System.Drawing.Size(181, 22);
|
||||
toolStripMenuItem20.Text = "Build Map";
|
||||
toolStripMenuItem20.Click += toolStripMenuItem20_Click;
|
||||
buildMapToolStripMenuItem.Name = "buildMapToolStripMenuItem";
|
||||
buildMapToolStripMenuItem.Size = new System.Drawing.Size(181, 22);
|
||||
buildMapToolStripMenuItem.Text = "Build Map";
|
||||
buildMapToolStripMenuItem.Click += buildMapToolStripMenuItem_Click;
|
||||
//
|
||||
// toolStripMenuItem21
|
||||
// buildBothToolStripMenuItem
|
||||
//
|
||||
toolStripMenuItem21.Name = "toolStripMenuItem21";
|
||||
toolStripMenuItem21.Size = new System.Drawing.Size(181, 22);
|
||||
toolStripMenuItem21.Text = "Clear Map";
|
||||
toolStripMenuItem21.Click += toolStripMenuItem21_Click;
|
||||
buildBothToolStripMenuItem.Name = "buildBothToolStripMenuItem";
|
||||
buildBothToolStripMenuItem.Size = new System.Drawing.Size(181, 22);
|
||||
buildBothToolStripMenuItem.Text = "Build Both";
|
||||
buildBothToolStripMenuItem.Click += buildBothToolStripMenuItem_Click;
|
||||
//
|
||||
// assetMapToolStripMenuItem
|
||||
// clearMapToolStripMenuItem
|
||||
//
|
||||
assetMapToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { assetMapNameTextBox, toolStripMenuItem22, assetMapTypeComboBox });
|
||||
assetMapToolStripMenuItem.Name = "assetMapToolStripMenuItem";
|
||||
assetMapToolStripMenuItem.Size = new System.Drawing.Size(126, 22);
|
||||
assetMapToolStripMenuItem.Text = "AssetMap";
|
||||
clearMapToolStripMenuItem.Name = "clearMapToolStripMenuItem";
|
||||
clearMapToolStripMenuItem.Size = new System.Drawing.Size(181, 22);
|
||||
clearMapToolStripMenuItem.Text = "Clear Map";
|
||||
clearMapToolStripMenuItem.Click += clearMapToolStripMenuItem_Click;
|
||||
//
|
||||
// toolStripSeparator7
|
||||
//
|
||||
toolStripSeparator7.Name = "toolStripSeparator7";
|
||||
toolStripSeparator7.Size = new System.Drawing.Size(178, 6);
|
||||
//
|
||||
// assetMapNameTextBox
|
||||
//
|
||||
@@ -650,12 +644,12 @@ namespace AssetStudioGUI
|
||||
assetMapNameTextBox.Size = new System.Drawing.Size(100, 23);
|
||||
assetMapNameTextBox.ToolTipText = "Enter name of AssetMap here";
|
||||
//
|
||||
// toolStripMenuItem22
|
||||
// buildAssetMapToolStripMenuItem
|
||||
//
|
||||
toolStripMenuItem22.Name = "toolStripMenuItem22";
|
||||
toolStripMenuItem22.Size = new System.Drawing.Size(181, 22);
|
||||
toolStripMenuItem22.Text = "Build AssetMap";
|
||||
toolStripMenuItem22.Click += toolStripMenuItem22_Click;
|
||||
buildAssetMapToolStripMenuItem.Name = "buildAssetMapToolStripMenuItem";
|
||||
buildAssetMapToolStripMenuItem.Size = new System.Drawing.Size(181, 22);
|
||||
buildAssetMapToolStripMenuItem.Text = "Build AssetMap";
|
||||
buildAssetMapToolStripMenuItem.Click += buildAssetMapToolStripMenuItem_Click;
|
||||
//
|
||||
// assetMapTypeComboBox
|
||||
//
|
||||
@@ -664,13 +658,33 @@ namespace AssetStudioGUI
|
||||
assetMapTypeComboBox.Size = new System.Drawing.Size(121, 23);
|
||||
assetMapTypeComboBox.SelectedIndexChanged += assetMapTypeComboBox_SelectedIndexChanged;
|
||||
//
|
||||
// toolStripSeparator8
|
||||
//
|
||||
toolStripSeparator8.Name = "toolStripSeparator8";
|
||||
toolStripSeparator8.Size = new System.Drawing.Size(178, 6);
|
||||
//
|
||||
// loadAIToolStripMenuItem
|
||||
//
|
||||
loadAIToolStripMenuItem.Name = "loadAIToolStripMenuItem";
|
||||
loadAIToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
|
||||
loadAIToolStripMenuItem.Size = new System.Drawing.Size(181, 22);
|
||||
loadAIToolStripMenuItem.Text = "Load AI";
|
||||
loadAIToolStripMenuItem.Click += loadAIToolStripMenuItem_Click;
|
||||
//
|
||||
// assetHelpersToolStripMenuItem
|
||||
//
|
||||
assetHelpersToolStripMenuItem.Name = "assetHelpersToolStripMenuItem";
|
||||
assetHelpersToolStripMenuItem.Size = new System.Drawing.Size(32, 19);
|
||||
//
|
||||
// MapToolStripMenuItem
|
||||
//
|
||||
MapToolStripMenuItem.Name = "MapToolStripMenuItem";
|
||||
MapToolStripMenuItem.Size = new System.Drawing.Size(32, 19);
|
||||
//
|
||||
// assetMapToolStripMenuItem
|
||||
//
|
||||
assetMapToolStripMenuItem.Name = "assetMapToolStripMenuItem";
|
||||
assetMapToolStripMenuItem.Size = new System.Drawing.Size(32, 19);
|
||||
//
|
||||
// toolStripSeparator5
|
||||
//
|
||||
toolStripSeparator5.Name = "toolStripSeparator5";
|
||||
@@ -1360,20 +1374,23 @@ namespace AssetStudioGUI
|
||||
private System.Windows.Forms.ToolStripMenuItem enableConsole;
|
||||
private System.Windows.Forms.ToolStripMenuItem miscToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem assetHelpersToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem20;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem22;
|
||||
private System.Windows.Forms.ToolStripMenuItem buildBothToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem buildAssetMapToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripComboBox MapNameComboBox;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
|
||||
private System.Windows.Forms.ToolStripMenuItem resetToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem abortStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem21;
|
||||
private System.Windows.Forms.ToolStripMenuItem clearMapToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem MapToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem assetMapToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem loadAIToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem clearConsoleToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripTextBox assetMapNameTextBox;
|
||||
private System.Windows.Forms.ToolStripComboBox assetMapTypeComboBox;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
||||
private System.Windows.Forms.ToolStripMenuItem buildMapToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -110,13 +110,8 @@ namespace AssetStudioGUI
|
||||
assetsManager.ResolveDependencies = Properties.Settings.Default.enableResolveDependencies;
|
||||
MiHoYoBinData.Encrypted = Properties.Settings.Default.encrypted;
|
||||
MiHoYoBinData.Key = Properties.Settings.Default.key;
|
||||
|
||||
var types = JsonConvert.DeserializeObject<Dictionary<ClassIDType, bool>>(Properties.Settings.Default.exportableTypes);
|
||||
foreach (var exportable in types)
|
||||
{
|
||||
if (assetsManager.ExportableTypes.ContainsKey(exportable.Key))
|
||||
assetsManager.ExportableTypes[exportable.Key] = exportable.Value;
|
||||
}
|
||||
Renderer.Parsable = !Properties.Settings.Default.disableRenderer;
|
||||
Shader.Parsable = !Properties.Settings.Default.disableShader;
|
||||
}
|
||||
|
||||
private void InitializeLogger()
|
||||
@@ -515,12 +510,6 @@ namespace AssetStudioGUI
|
||||
{
|
||||
var exportOpt = new ExportOptions();
|
||||
exportOpt.ShowDialog(this);
|
||||
var types = JsonConvert.DeserializeObject<Dictionary<ClassIDType, bool>>(Properties.Settings.Default.exportableTypes);
|
||||
foreach (var exportable in types)
|
||||
{
|
||||
if (assetsManager.ExportableTypes.ContainsKey(exportable.Key))
|
||||
assetsManager.ExportableTypes[exportable.Key] = exportable.Value;
|
||||
}
|
||||
}
|
||||
|
||||
private void assetListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
|
||||
@@ -763,6 +752,9 @@ namespace AssetStudioGUI
|
||||
{
|
||||
switch (assetItem.Asset)
|
||||
{
|
||||
case GameObject m_GameObject:
|
||||
PreviewGameObject(m_GameObject);
|
||||
break;
|
||||
case Texture2D m_Texture2D:
|
||||
PreviewTexture2D(assetItem, m_Texture2D);
|
||||
break;
|
||||
@@ -791,8 +783,9 @@ namespace AssetStudioGUI
|
||||
case Sprite m_Sprite:
|
||||
PreviewSprite(assetItem, m_Sprite);
|
||||
break;
|
||||
case Animator _:
|
||||
StatusStripUpdate("Can be exported to FBX file.");
|
||||
case Animator m_Animator:
|
||||
//StatusStripUpdate("Can be exported to FBX file.");
|
||||
PreviewAnimator(m_Animator);
|
||||
break;
|
||||
case AnimationClip _:
|
||||
StatusStripUpdate("Can be exported with Animator or Objects");
|
||||
@@ -1237,6 +1230,163 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
|
||||
private void PreviewGameObject(GameObject m_GameObject)
|
||||
{
|
||||
var model = new ModelConverter(m_GameObject, Properties.Settings.Default.convertType, Studio.Game, false, Array.Empty<AnimationClip>());
|
||||
if (model.MeshList.Count > 0)
|
||||
{
|
||||
viewMatrixData = Matrix4.CreateRotationY(-(float)Math.PI / 4) * Matrix4.CreateRotationX(-(float)Math.PI / 6);
|
||||
#region Vertices
|
||||
vertexData = model.MeshList.SelectMany(x => x.VertexList).Select(x => new Vector3(x.Vertex.X, x.Vertex.Y, x.Vertex.Z)).ToArray();
|
||||
// Calculate Bounding
|
||||
Vector3 min = vertexData.Aggregate(Vector3.ComponentMin);
|
||||
Vector3 max = vertexData.Aggregate(Vector3.ComponentMax);
|
||||
|
||||
// Calculate modelMatrix
|
||||
Vector3 dist = max - min;
|
||||
Vector3 offset = (max - min) / 2;
|
||||
float d = Math.Max(1e-5f, dist.Length);
|
||||
modelMatrixData = Matrix4.CreateTranslation(-offset) * Matrix4.CreateScale(2f / d);
|
||||
#endregion
|
||||
#region Indicies
|
||||
int meshOffset = 0;
|
||||
var indices = new List<int>();
|
||||
foreach (var mesh in model.MeshList)
|
||||
{
|
||||
foreach (var submesh in mesh.SubmeshList)
|
||||
{
|
||||
foreach (var face in submesh.FaceList)
|
||||
{
|
||||
foreach (var index in face.VertexIndices)
|
||||
{
|
||||
indices.Add(submesh.BaseVertex + index + meshOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
meshOffset += mesh.VertexList.Count;
|
||||
}
|
||||
indiceData = indices.ToArray();
|
||||
#endregion
|
||||
#region Normals
|
||||
normalData = model.MeshList.SelectMany(x => x.VertexList).Select(x => new Vector3(x.Normal.X, x.Normal.Y, x.Normal.Z)).ToArray();
|
||||
// calculate normal by ourself
|
||||
normal2Data = new Vector3[vertexData.Length];
|
||||
int[] normalCalculatedCount = new int[vertexData.Length];
|
||||
Array.Fill(normal2Data, Vector3.Zero);
|
||||
Array.Fill(normalCalculatedCount, 0);
|
||||
for (int j = 0; j < indiceData.Length; j += 3)
|
||||
{
|
||||
Vector3 dir1 = vertexData[indiceData[j + 1]] - vertexData[indiceData[j]];
|
||||
Vector3 dir2 = vertexData[indiceData[j + 2]] - vertexData[indiceData[j]];
|
||||
Vector3 normal = Vector3.Cross(dir1, dir2);
|
||||
normal.Normalize();
|
||||
for (int k = 0; k < 3; k++)
|
||||
{
|
||||
normal2Data[indiceData[j + k]] += normal;
|
||||
normalCalculatedCount[indiceData[j + k]]++;
|
||||
}
|
||||
}
|
||||
for (int j = 0; j < vertexData.Length; j++)
|
||||
{
|
||||
if (normalCalculatedCount[j] == 0)
|
||||
normal2Data[j] = new Vector3(0, 1, 0);
|
||||
else
|
||||
normal2Data[j] /= normalCalculatedCount[j];
|
||||
}
|
||||
#endregion
|
||||
#region Colors
|
||||
colorData = model.MeshList.SelectMany(x => x.VertexList).Select(x => new Vector4(x.Color.R, x.Color.G, x.Color.B, x.Color.A)).ToArray();
|
||||
#endregion
|
||||
glControl.Visible = true;
|
||||
CreateVAO();
|
||||
StatusStripUpdate("Using OpenGL Version: " + GL.GetString(StringName.Version) + "\n"
|
||||
+ "'Mouse Left'=Rotate | 'Mouse Right'=Move | 'Mouse Wheel'=Zoom \n"
|
||||
+ "'Ctrl W'=Wireframe | 'Ctrl S'=Shade | 'Ctrl N'=ReNormal ");
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusStripUpdate("Unable to preview this model");
|
||||
}
|
||||
}
|
||||
private void PreviewAnimator(Animator m_Animator)
|
||||
{
|
||||
var model = new ModelConverter(m_Animator, Properties.Settings.Default.convertType, Studio.Game, false, Array.Empty<AnimationClip>());
|
||||
if (model.MeshList.Count > 0)
|
||||
{
|
||||
viewMatrixData = Matrix4.CreateRotationY(-(float)Math.PI / 4) * Matrix4.CreateRotationX(-(float)Math.PI / 6);
|
||||
#region Vertices
|
||||
vertexData = model.MeshList.SelectMany(x => x.VertexList).Select(x => new Vector3(x.Vertex.X, x.Vertex.Y, x.Vertex.Z)).ToArray();
|
||||
// Calculate Bounding
|
||||
Vector3 min = vertexData.Aggregate(Vector3.ComponentMin);
|
||||
Vector3 max = vertexData.Aggregate(Vector3.ComponentMax);
|
||||
|
||||
// Calculate modelMatrix
|
||||
Vector3 dist = max - min;
|
||||
Vector3 offset = (max - min) / 2;
|
||||
float d = Math.Max(1e-5f, dist.Length);
|
||||
modelMatrixData = Matrix4.CreateTranslation(-offset) * Matrix4.CreateScale(2f / d);
|
||||
#endregion
|
||||
#region Indicies
|
||||
int meshOffset = 0;
|
||||
var indices = new List<int>();
|
||||
foreach (var mesh in model.MeshList)
|
||||
{
|
||||
foreach (var submesh in mesh.SubmeshList)
|
||||
{
|
||||
foreach (var face in submesh.FaceList)
|
||||
{
|
||||
foreach (var index in face.VertexIndices)
|
||||
{
|
||||
indices.Add(submesh.BaseVertex + index + meshOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
meshOffset += mesh.VertexList.Count;
|
||||
}
|
||||
indiceData = indices.ToArray();
|
||||
#endregion
|
||||
#region Normals
|
||||
normalData = model.MeshList.SelectMany(x => x.VertexList).Select(x => new Vector3(x.Normal.X, x.Normal.Y, x.Normal.Z)).ToArray();
|
||||
// calculate normal by ourself
|
||||
normal2Data = new Vector3[vertexData.Length];
|
||||
int[] normalCalculatedCount = new int[vertexData.Length];
|
||||
Array.Fill(normal2Data, Vector3.Zero);
|
||||
Array.Fill(normalCalculatedCount, 0);
|
||||
for (int j = 0; j < indiceData.Length; j += 3)
|
||||
{
|
||||
Vector3 dir1 = vertexData[indiceData[j + 1]] - vertexData[indiceData[j]];
|
||||
Vector3 dir2 = vertexData[indiceData[j + 2]] - vertexData[indiceData[j]];
|
||||
Vector3 normal = Vector3.Cross(dir1, dir2);
|
||||
normal.Normalize();
|
||||
for (int k = 0; k < 3; k++)
|
||||
{
|
||||
normal2Data[indiceData[j + k]] += normal;
|
||||
normalCalculatedCount[indiceData[j + k]]++;
|
||||
}
|
||||
}
|
||||
for (int j = 0; j < vertexData.Length; j++)
|
||||
{
|
||||
if (normalCalculatedCount[j] == 0)
|
||||
normal2Data[j] = new Vector3(0, 1, 0);
|
||||
else
|
||||
normal2Data[j] /= normalCalculatedCount[j];
|
||||
}
|
||||
#endregion
|
||||
#region Colors
|
||||
colorData = model.MeshList.SelectMany(x => x.VertexList).Select(x => new Vector4(x.Color.R, x.Color.G, x.Color.B, x.Color.A)).ToArray();
|
||||
#endregion
|
||||
glControl.Visible = true;
|
||||
CreateVAO();
|
||||
StatusStripUpdate("Using OpenGL Version: " + GL.GetString(StringName.Version) + "\n"
|
||||
+ "'Mouse Left'=Rotate | 'Mouse Right'=Move | 'Mouse Wheel'=Zoom \n"
|
||||
+ "'Ctrl W'=Wireframe | 'Ctrl S'=Shade | 'Ctrl N'=ReNormal ");
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusStripUpdate("Unable to preview this model");
|
||||
}
|
||||
}
|
||||
|
||||
private void PreviewSprite(AssetItem assetItem, Sprite m_Sprite)
|
||||
{
|
||||
var image = m_Sprite.GetImage();
|
||||
@@ -1714,9 +1864,9 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
|
||||
private void assetHelpersToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
|
||||
private void miscToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
if (assetHelpersToolStripMenuItem.Enabled)
|
||||
if (miscToolStripMenuItem.Enabled)
|
||||
{
|
||||
MapNameComboBox.Items.Clear();
|
||||
MapNameComboBox.Items.AddRange(AssetsHelper.GetMaps());
|
||||
@@ -1831,10 +1981,11 @@ namespace AssetStudioGUI
|
||||
Properties.Settings.Default.selectedGame = specifyGame.SelectedIndex;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
ResetForm();
|
||||
|
||||
Studio.Game = GameManager.GetGame(Properties.Settings.Default.selectedGame);
|
||||
Logger.Info($"Target Game is {Studio.Game.Name}");
|
||||
|
||||
ResetForm();
|
||||
assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text;
|
||||
assetsManager.Game = Studio.Game;
|
||||
}
|
||||
@@ -1844,17 +1995,18 @@ namespace AssetStudioGUI
|
||||
miscToolStripMenuItem.DropDown.Visible = false;
|
||||
InvokeUpdate(miscToolStripMenuItem, false);
|
||||
|
||||
var name = MapNameComboBox.SelectedItem.ToString();
|
||||
await Task.Run(() => AssetsHelper.LoadMap(name));
|
||||
|
||||
ResetForm();
|
||||
|
||||
var name = MapNameComboBox.SelectedItem.ToString();
|
||||
await Task.Run(() => AssetsHelper.LoadCABMap(name));
|
||||
|
||||
assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text;
|
||||
assetsManager.Game = Studio.Game;
|
||||
|
||||
InvokeUpdate(miscToolStripMenuItem, true);
|
||||
}
|
||||
|
||||
private async void toolStripMenuItem20_Click(object sender, EventArgs e)
|
||||
private async void buildMapToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
miscToolStripMenuItem.DropDown.Visible = false;
|
||||
InvokeUpdate(miscToolStripMenuItem, false);
|
||||
@@ -1903,12 +2055,83 @@ namespace AssetStudioGUI
|
||||
var files = Directory.GetFiles(openFolderDialog.Folder, "*.*", SearchOption.AllDirectories).ToArray();
|
||||
files = files.Where(x => FileReader.IsReadable(x, Studio.Game)).ToArray();
|
||||
Logger.Info($"Found {files.Length} files");
|
||||
await Task.Run(() => AssetsHelper.BuildMap(files, name, openFolderDialog.Folder, Studio.Game));
|
||||
await Task.Run(() => AssetsHelper.BuildCABMap(files, name, openFolderDialog.Folder, Studio.Game));
|
||||
}
|
||||
InvokeUpdate(miscToolStripMenuItem, true);
|
||||
}
|
||||
|
||||
private void toolStripMenuItem21_Click(object sender, EventArgs e)
|
||||
private async void buildBothToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
miscToolStripMenuItem.DropDown.Visible = false;
|
||||
InvokeUpdate(miscToolStripMenuItem, false);
|
||||
|
||||
var input = MapNameComboBox.Text;
|
||||
var selectedText = MapNameComboBox.SelectedText;
|
||||
var exportListType = (ExportListType)assetMapTypeComboBox.SelectedItem;
|
||||
var name = "";
|
||||
|
||||
if (!string.IsNullOrEmpty(selectedText))
|
||||
{
|
||||
name = selectedText;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(input))
|
||||
{
|
||||
if (input.IndexOfAny(Path.GetInvalidFileNameChars()) != -1)
|
||||
{
|
||||
Logger.Warning("Name has invalid characters !!");
|
||||
InvokeUpdate(miscToolStripMenuItem, true);
|
||||
return;
|
||||
}
|
||||
|
||||
name = input;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Error("Map name is empty, please enter any name in ComboBox above");
|
||||
InvokeUpdate(miscToolStripMenuItem, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (File.Exists(Path.Combine(AssetsHelper.MapName, $"{name}.bin")))
|
||||
{
|
||||
var acceptOverride = MessageBox.Show("Map already exist, Do you want to override it ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
||||
if (acceptOverride != DialogResult.Yes)
|
||||
{
|
||||
InvokeUpdate(miscToolStripMenuItem, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var openFolderDialog = new OpenFolderDialog();
|
||||
openFolderDialog.Title = "Select Game Folder";
|
||||
if (openFolderDialog.ShowDialog(this) == DialogResult.OK)
|
||||
{
|
||||
var saveFolderDialog = new OpenFolderDialog();
|
||||
saveFolderDialog.InitialFolder = saveDirectoryBackup;
|
||||
saveFolderDialog.Title = "Select Output Folder";
|
||||
if (saveFolderDialog.ShowDialog(this) == DialogResult.OK)
|
||||
{
|
||||
if (File.Exists(Path.Combine(saveFolderDialog.Folder, $"{name}{exportListType.GetExtension()}")))
|
||||
{
|
||||
var acceptOverride = MessageBox.Show("AssetMap already exist, Do you want to override it ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
||||
if (acceptOverride != DialogResult.Yes)
|
||||
{
|
||||
InvokeUpdate(miscToolStripMenuItem, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
saveDirectoryBackup = saveFolderDialog.Folder;
|
||||
Logger.Info("Scanning for files...");
|
||||
var files = Directory.GetFiles(openFolderDialog.Folder, "*.*", SearchOption.AllDirectories).ToArray();
|
||||
files = files.Where(x => FileReader.IsReadable(x, Studio.Game)).ToArray();
|
||||
Logger.Info($"Found {files.Length} files");
|
||||
await Task.Run(() => AssetsHelper.BuildBoth(files, name, openFolderDialog.Folder, Studio.Game, saveFolderDialog.Folder, exportListType));
|
||||
}
|
||||
}
|
||||
InvokeUpdate(miscToolStripMenuItem, true);
|
||||
}
|
||||
|
||||
private void clearMapToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
miscToolStripMenuItem.DropDown.Visible = false;
|
||||
InvokeUpdate(miscToolStripMenuItem, false);
|
||||
@@ -1993,7 +2216,7 @@ namespace AssetStudioGUI
|
||||
Console.Clear();
|
||||
}
|
||||
|
||||
private async void toolStripMenuItem22_Click(object sender, EventArgs e)
|
||||
private async void buildAssetMapToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
miscToolStripMenuItem.DropDown.Visible = false;
|
||||
InvokeUpdate(miscToolStripMenuItem, false);
|
||||
@@ -2038,8 +2261,7 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
saveDirectoryBackup = saveFolderDialog.Folder;
|
||||
var toExportAssets = await Task.Run(() => AssetsHelper.BuildAssetMap(files, Studio.Game));
|
||||
AssetsHelper.ExportAssetsMap(toExportAssets, name, saveFolderDialog.Folder, exportListType);
|
||||
await Task.Run(() => AssetsHelper.BuildAssetMap(files, name, Studio.Game, saveFolderDialog.Folder, exportListType));
|
||||
}
|
||||
}
|
||||
InvokeUpdate(miscToolStripMenuItem, true);
|
||||
|
||||
@@ -60,6 +60,9 @@
|
||||
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>312, 17</value>
|
||||
</metadata>
|
||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>432, 17</value>
|
||||
</metadata>
|
||||
<data name="fontPreviewBox.Text" xml:space="preserve">
|
||||
<value>abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ
|
||||
1234567890.:,;'\"(!?)+-*/=
|
||||
@@ -78,9 +81,6 @@ The quick brown fox jumps over the lazy dog. 1234567890
|
||||
|
||||
The quick brown fox jumps over the lazy dog. 1234567890</value>
|
||||
</data>
|
||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>432, 17</value>
|
||||
</metadata>
|
||||
<metadata name="timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>553, 17</value>
|
||||
</metadata>
|
||||
|
||||
54
AssetStudioGUI/ExportOptions.Designer.cs
generated
54
AssetStudioGUI/ExportOptions.Designer.cs
generated
@@ -71,12 +71,12 @@ namespace AssetStudioGUI
|
||||
key = new System.Windows.Forms.NumericUpDown();
|
||||
keyToolTip = new System.Windows.Forms.ToolTip(components);
|
||||
groupBox4 = new System.Windows.Forms.GroupBox();
|
||||
label7 = new System.Windows.Forms.Label();
|
||||
exportableTypes = new System.Windows.Forms.CheckedListBox();
|
||||
skipContainer = new System.Windows.Forms.CheckBox();
|
||||
enableResolveDependencies = new System.Windows.Forms.CheckBox();
|
||||
resolveToolTip = new System.Windows.Forms.ToolTip(components);
|
||||
skipToolTip = new System.Windows.Forms.ToolTip(components);
|
||||
disableRenderer = new System.Windows.Forms.CheckBox();
|
||||
disableShader = new System.Windows.Forms.CheckBox();
|
||||
groupBox1.SuspendLayout();
|
||||
panel1.SuspendLayout();
|
||||
groupBox2.SuspendLayout();
|
||||
@@ -537,8 +537,8 @@ namespace AssetStudioGUI
|
||||
// groupBox4
|
||||
//
|
||||
groupBox4.AutoSize = true;
|
||||
groupBox4.Controls.Add(label7);
|
||||
groupBox4.Controls.Add(exportableTypes);
|
||||
groupBox4.Controls.Add(disableShader);
|
||||
groupBox4.Controls.Add(disableRenderer);
|
||||
groupBox4.Controls.Add(skipContainer);
|
||||
groupBox4.Controls.Add(key);
|
||||
groupBox4.Controls.Add(encrypted);
|
||||
@@ -552,24 +552,6 @@ namespace AssetStudioGUI
|
||||
groupBox4.TabStop = false;
|
||||
groupBox4.Text = "Options";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.AutoSize = true;
|
||||
label7.Location = new System.Drawing.Point(7, 94);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new System.Drawing.Size(95, 15);
|
||||
label7.TabIndex = 16;
|
||||
label7.Text = "Exportable Types";
|
||||
//
|
||||
// exportableTypes
|
||||
//
|
||||
exportableTypes.CheckOnClick = true;
|
||||
exportableTypes.FormattingEnabled = true;
|
||||
exportableTypes.Location = new System.Drawing.Point(102, 94);
|
||||
exportableTypes.Name = "exportableTypes";
|
||||
exportableTypes.Size = new System.Drawing.Size(152, 58);
|
||||
exportableTypes.TabIndex = 15;
|
||||
//
|
||||
// skipContainer
|
||||
//
|
||||
skipContainer.AutoSize = true;
|
||||
@@ -598,6 +580,30 @@ namespace AssetStudioGUI
|
||||
resolveToolTip.SetToolTip(enableResolveDependencies, "Toggle the behaviour of loading assets.\r\nDisable to load file(s) without its dependencies.");
|
||||
enableResolveDependencies.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// disableRenderer
|
||||
//
|
||||
disableRenderer.AutoSize = true;
|
||||
disableRenderer.Location = new System.Drawing.Point(8, 96);
|
||||
disableRenderer.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
disableRenderer.Name = "disableRenderer";
|
||||
disableRenderer.Size = new System.Drawing.Size(114, 19);
|
||||
disableRenderer.TabIndex = 15;
|
||||
disableRenderer.Text = "Disable Renderer";
|
||||
skipToolTip.SetToolTip(disableRenderer, "Skips the container recovery step.\nImproves loading when dealing with a large number of files.");
|
||||
disableRenderer.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// disableShader
|
||||
//
|
||||
disableShader.AutoSize = true;
|
||||
disableShader.Location = new System.Drawing.Point(8, 121);
|
||||
disableShader.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
disableShader.Name = "disableShader";
|
||||
disableShader.Size = new System.Drawing.Size(103, 19);
|
||||
disableShader.TabIndex = 16;
|
||||
disableShader.Text = "Disable Shader";
|
||||
skipToolTip.SetToolTip(disableShader, "Skips the container recovery step.\nImproves loading when dealing with a large number of files.");
|
||||
disableShader.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// ExportOptions
|
||||
//
|
||||
AcceptButton = OKbutton;
|
||||
@@ -679,7 +685,7 @@ namespace AssetStudioGUI
|
||||
private System.Windows.Forms.CheckBox skipContainer;
|
||||
private System.Windows.Forms.ToolTip resolveToolTip;
|
||||
private System.Windows.Forms.ToolTip skipToolTip;
|
||||
private System.Windows.Forms.CheckedListBox exportableTypes;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.CheckBox disableShader;
|
||||
private System.Windows.Forms.CheckBox disableRenderer;
|
||||
}
|
||||
}
|
||||
@@ -42,27 +42,12 @@ namespace AssetStudioGUI
|
||||
collectAnimations.Checked = Properties.Settings.Default.collectAnimations;
|
||||
encrypted.Checked = Properties.Settings.Default.encrypted;
|
||||
key.Value = Properties.Settings.Default.key;
|
||||
|
||||
exportableTypes.Items.AddRange(Studio.assetsManager.ExportableTypes.Keys.Select(x => x.ToString()).ToArray());
|
||||
var types = JsonConvert.DeserializeObject<Dictionary<ClassIDType, bool>>(Properties.Settings.Default.exportableTypes);
|
||||
foreach (var exportable in types)
|
||||
{
|
||||
var idx = exportableTypes.Items.IndexOf(exportable.Key.ToString());
|
||||
if (idx != -1)
|
||||
exportableTypes.SetItemChecked(idx, exportable.Value);
|
||||
}
|
||||
disableRenderer.Checked = Properties.Settings.Default.disableRenderer;
|
||||
disableShader.Checked = Properties.Settings.Default.disableShader;
|
||||
}
|
||||
|
||||
private void OKbutton_Click(object sender, EventArgs e)
|
||||
{
|
||||
var types = new Dictionary<ClassIDType, bool>();
|
||||
for (int i = 0; i < exportableTypes.Items.Count; i++)
|
||||
{
|
||||
var type = Enum.Parse<ClassIDType>(exportableTypes.Items[i].ToString());
|
||||
var state = exportableTypes.GetItemChecked(i);
|
||||
types.Add(type, state);
|
||||
}
|
||||
Properties.Settings.Default.exportableTypes = JsonConvert.SerializeObject(types);
|
||||
Properties.Settings.Default.assetGroupOption = assetGroupOptions.SelectedIndex;
|
||||
Properties.Settings.Default.restoreExtensionName = restoreExtensionName.Checked;
|
||||
Properties.Settings.Default.convertTexture = converttexture.Checked;
|
||||
@@ -92,9 +77,13 @@ namespace AssetStudioGUI
|
||||
Properties.Settings.Default.collectAnimations = collectAnimations.Checked;
|
||||
Properties.Settings.Default.encrypted = encrypted.Checked;
|
||||
Properties.Settings.Default.key = (byte)key.Value;
|
||||
Properties.Settings.Default.disableRenderer = disableRenderer.Checked;
|
||||
Properties.Settings.Default.disableShader = disableShader.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
MiHoYoBinData.Key = (byte)key.Value;
|
||||
MiHoYoBinData.Encrypted = encrypted.Checked;
|
||||
Renderer.Parsable = !Properties.Settings.Default.disableRenderer;
|
||||
Shader.Parsable = !Properties.Settings.Default.disableShader;
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
}
|
||||
|
||||
@@ -60,6 +60,12 @@
|
||||
<metadata name="exportUvsTooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="exportUvsTooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="keyToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>162, 17</value>
|
||||
</metadata>
|
||||
<metadata name="keyToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>162, 17</value>
|
||||
</metadata>
|
||||
@@ -69,6 +75,9 @@
|
||||
<metadata name="resolveToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>273, 17</value>
|
||||
</metadata>
|
||||
<metadata name="resolveToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>273, 17</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>57</value>
|
||||
</metadata>
|
||||
|
||||
22
AssetStudioGUI/Properties/Settings.Designer.cs
generated
22
AssetStudioGUI/Properties/Settings.Designer.cs
generated
@@ -385,15 +385,25 @@ namespace AssetStudioGUI.Properties {
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("{\"GameObject\":true,\"Material\":true,\"Texture2D\":true,\"Mesh\":true,\"Renderer\":true,\"" +
|
||||
"Shader\":true,\"TextAsset\":true,\"AnimationClip\":true,\"Font\":true,\"Sprite\":true,\"An" +
|
||||
"imator\":true,\"MiHoYoBinData\":true,\"AssetBundle\":true}")]
|
||||
public string exportableTypes {
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool disableShader {
|
||||
get {
|
||||
return ((string)(this["exportableTypes"]));
|
||||
return ((bool)(this["disableShader"]));
|
||||
}
|
||||
set {
|
||||
this["exportableTypes"] = value;
|
||||
this["disableShader"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool disableRenderer {
|
||||
get {
|
||||
return ((bool)(this["disableRenderer"]));
|
||||
}
|
||||
set {
|
||||
this["disableRenderer"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,8 +92,11 @@
|
||||
<Setting Name="exportUV0UV1" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="exportableTypes" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">{"GameObject":true,"Material":true,"Texture2D":true,"Mesh":true,"Renderer":true,"Shader":true,"TextAsset":true,"AnimationClip":true,"Font":true,"Sprite":true,"Animator":true,"MiHoYoBinData":true,"AssetBundle":true}</Value>
|
||||
<Setting Name="disableShader" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="disableRenderer" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
@@ -154,7 +154,7 @@ namespace AssetStudioGUI
|
||||
{
|
||||
int total = 0;
|
||||
StatusStripUpdate($"Decompressing {reader.FileName} ...");
|
||||
using var stream = new SubStream(reader.BaseStream, 0);
|
||||
using var stream = new OffsetStream(reader.BaseStream, 0);
|
||||
do
|
||||
{
|
||||
stream.Offset = stream.AbsolutePosition;
|
||||
@@ -224,17 +224,17 @@ namespace AssetStudioGUI
|
||||
if (uint.TryParse(name, out var id))
|
||||
{
|
||||
var path = ResourceIndex.GetContainer(id, last);
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
asset.Container = path;
|
||||
if (asset.Type == ClassIDType.MiHoYoBinData)
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
asset.Text = Path.GetFileNameWithoutExtension(path);
|
||||
asset.Container = path;
|
||||
if (asset.Type == ClassIDType.MiHoYoBinData)
|
||||
{
|
||||
asset.Text = Path.GetFileNameWithoutExtension(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Logger.Info("Updated !!");
|
||||
}
|
||||
}
|
||||
@@ -347,10 +347,10 @@ namespace AssetStudioGUI
|
||||
exportable = true;
|
||||
break;
|
||||
case ResourceManager m_ResourceManager:
|
||||
foreach (var m_Container in m_ResourceManager.m_Container)
|
||||
{
|
||||
containers.Add((m_Container.Value, m_Container.Key));
|
||||
}
|
||||
foreach (var m_Container in m_ResourceManager.m_Container)
|
||||
{
|
||||
containers.Add((m_Container.Value, m_Container.Key));
|
||||
}
|
||||
break;
|
||||
case NamedObject m_NamedObject:
|
||||
assetItem.Text = m_NamedObject.m_Name;
|
||||
@@ -369,6 +369,11 @@ namespace AssetStudioGUI
|
||||
}
|
||||
foreach((var pptr, var name) in mihoyoBinDataNames)
|
||||
{
|
||||
if (assetsManager.tokenSource.IsCancellationRequested)
|
||||
{
|
||||
Logger.Info("Processing asset namnes has been cancelled !!");
|
||||
return (string.Empty, Array.Empty<TreeNode>().ToList());
|
||||
}
|
||||
if (pptr.TryGet<MiHoYoBinData>(out var obj))
|
||||
{
|
||||
var assetItem = objectAssetItemDic[obj];
|
||||
@@ -384,6 +389,11 @@ namespace AssetStudioGUI
|
||||
{
|
||||
foreach ((var pptr, var container) in containers)
|
||||
{
|
||||
if (assetsManager.tokenSource.IsCancellationRequested)
|
||||
{
|
||||
Logger.Info("Processing containers been cancelled !!");
|
||||
return (string.Empty, Array.Empty<TreeNode>().ToList());
|
||||
}
|
||||
if (pptr.TryGet(out var obj))
|
||||
{
|
||||
objectAssetItemDic[obj].Container = container;
|
||||
@@ -397,6 +407,11 @@ namespace AssetStudioGUI
|
||||
}
|
||||
foreach (var tmp in exportableAssets)
|
||||
{
|
||||
if (assetsManager.tokenSource.IsCancellationRequested)
|
||||
{
|
||||
Logger.Info("Processing subitems been cancelled !!");
|
||||
return (string.Empty, Array.Empty<TreeNode>().ToList());
|
||||
}
|
||||
tmp.SetSubItems();
|
||||
}
|
||||
|
||||
@@ -492,6 +507,11 @@ namespace AssetStudioGUI
|
||||
var typeMap = new Dictionary<string, SortedDictionary<int, TypeTreeItem>>();
|
||||
foreach (var assetsFile in assetsManager.assetsFileList)
|
||||
{
|
||||
if (assetsManager.tokenSource.IsCancellationRequested)
|
||||
{
|
||||
Logger.Info("Processing class structure been cancelled !!");
|
||||
return new Dictionary<string, SortedDictionary<int, TypeTreeItem>>();
|
||||
}
|
||||
if (typeMap.TryGetValue(assetsFile.unityVersion, out var curVer))
|
||||
{
|
||||
foreach (var type in assetsFile.m_Types.Where(x => x.m_Type != null))
|
||||
|
||||
Reference in New Issue
Block a user